Я пытаюсь внедрить один класс (простой класс 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 это простой класс, который содержит список констант ошибок:
class ErrorConstants
{
public const ERR_MISSING = 'Record could not be found.';
}
Ошибка возникает при попытке выбросить исключение в CwPackagePeriod
класс, если целочисленное значение выходит за пределы в установщике:
throw new InvalidOrMissingParameterException(
sprintf($this->errors::ERR_MISSING)
);
Ошибка заключается в следующем:
Имя класса должно быть допустимым объектом или строкой
AbstractRestEntity
класс не содержит ссылки на ErrorConstants
и когда я добавляю туда ссылку, ничего не меняется в отношении ошибки. Что я делаю неправильно?
Как отметил 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
не определено в этой части кода по какой-то причине.
Других решений пока нет …