类名必须是有效的对象或字符串

时间:2018-12-17 14:43:29

标签: php symfony orm doctrine

我试图将一个类(一个简单的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的任何引用,并且当我在其中添加引用时,该错误没有任何变化。我在做什么错了?

1 个答案:

答案 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