gpt4 book ai didi

php - Symfony2 扩展了 Exception 类

转载 作者:行者123 更新时间:2023-12-04 17:00:35 25 4
gpt4 key购买 nike

我正在做一个 Symfony2 项目。对于有用的技术实践,我需要导入外部库。所以我做到了。但是这个库创建了一些从 Exception 扩展的 *_Exception 类。

我的外部库文件以:

class CloudKey_Exception extends Exception {}
class CloudKey_RPCException extends CloudKey_Exception {public $data = null;}
class CloudKey_ProcessorException extends CloudKey_RPCException {}
class CloudKey_TransportException extends CloudKey_RPCException {}
class CloudKey_SerializerException extends CloudKey_RPCException {}
class CloudKey_AuthenticationErrorException extends CloudKey_RPCException {}
class CloudKey_RateLimitExceededException extends CloudKey_AuthenticationErrorException {}

class CloudKey_InvalidRequestException extends CloudKey_RPCException {}
class CloudKey_InvalidObjectException extends CloudKey_InvalidRequestException {}
class CloudKey_InvalidMethodException extends CloudKey_InvalidRequestException {}
class CloudKey_InvalidParamException extends CloudKey_InvalidRequestException {}

class CloudKey_ApplicationException extends CloudKey_RPCException {}
class CloudKey_NotFoundException extends CloudKey_ApplicationException {}
class CloudKey_ExistsException extends CloudKey_ApplicationException {}
class CloudKey_LimitExceededException extends CloudKey_ApplicationException {}

当我尝试在 Controller 中实例化我的对象时,Symfony 返回:

Fatal error: Class 'CD\DMBundle\Entity\Exception' not found in /var/www/carpediese/src/CD/DMBundle/Entity/CloudKey.php on line 513



我认为 Exception 类是原生 PHP5+ 类。我怎么能告诉 Symfony?

最佳答案

记得正确设置 use使用 Exception 的文件中的语句类(class)。

编辑:

当您在 namespace 下方引用 PHP 5.3+ 中的任何类时声明您需要添加用于引用类的命名空间(或在引用类时使用整个命名空间)。所以,如果 Exception您正在使用的类属于说 someLibrary\ClouKey\Exceptions\您应该拥有的命名空间

use someLibrary\CloudKey\Exceptions\Exception;

在文件的开头,正下方 namespace ,或者在定义新类时使用整个命名空间:
class CloudKey_Exception extends someLibrary\CloudKey\Exceptions\Exception {}

编辑2:

在类里面,您使用的是 Exception确实是原生 PHP 类,所以 \Exception应该使用。你得到的错误是由 CloudKey的这部分产生的类(class):
public function __get($name)
{
if (!isset($this->objects[$name]))
{
$class = 'CloudKey_' . ucfirst($name);
if (!class_exists($class))
{
$class = 'CloudKey_Api';
}
$this->objects[$name] = new $class($this->user_id, $this->api_key, $this->base_url, $this->cdn_url, $name, $this->proxy, $this->timeout);
$this->objects[$name]->parent = $this;
}

return $this->objects[$name];
}

根据文档( http://php.net/manual/en/language.oop5.basic.php ):

If a string containing the name of a class is used with new, a new instance of that class will be created. If the class is in a namespace, its fully qualified name must be used when doing this.



因此,您必须编辑代码的引用部分,以使用字符串内的整个命名空间作为类名。

关于php - Symfony2 扩展了 Exception 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14688889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com