我试图将一个类(一个简单的PHP类)注入另一个类(一个带有ORM\Entity
的带注释的类),并得到一个错误,但是我找不到源。查看代码后,我感觉自己一切都正确,但是我无法解决此错误。
以下是相关代码:
首先,我要在其中注入ORM\Entity
类的类ErrorConstants
:
use Base\Model\Constants\ErrorConstants;
/**
* @ORM\Entity ...
*/
class CwPackagePeriod extends AbstractRestEntity
public $errors;
public function __construct()
{
parent::__construct();
$this->errors = new ErrorConstants();
}
}
ErrorConstants
类是一个简单的类,其中包含错误常量列表:
class ErrorConstants
{
public const ERR_MISSING = 'Record could not be found.';
}
如果整数值超出设置器的范围,当我尝试在CwPackagePeriod
类中引发异常时,就会发生错误:
throw new InvalidOrMissingParameterException(
sprintf($this->errors::ERR_MISSING)
);
错误如下:
类名必须是有效的对象或字符串
AbstractRestEntity
类不包含对ErrorConstants
的任何引用,并且当我在其中添加引用时,该错误没有任何变化。我在做什么错了?
答案 0 :(得分:2)
如u_mulder所述,常量是指类,而不是类实例。为了从类中正确获取常量,可以在ErrorConstants类中使用类似的东西:
public function getConstants()
{
$reflectionClass = new \ReflectionClass($this);
return $reflectionClass->getConstants();
}
然后在您的CwPackagePeriod类中:
public function __construct()
{
parent::__construct();
$errorConstants = new ErrorConstants();
$this->errors = $errorConstants->getConstants();
}
...
throw new InvalidOrMissingParameterException(
sprintf($this->errors['ERR_MISSING']);
);
当然,最简单的解决方案是只使用:
throw new InvalidOrMissingParameterException(
sprintf(ErrorConstants::ERR_MISSING);
);
最后,我想指出一下,尽管它不是很直观,但是您确实可以使用$this->errors::ERR_MISSING
来获得一个常数。出现此错误的原因可能是由于某些原因在该部分代码中未定义$this->errors
。