Имя класса должно быть допустимым объектом или строкой

Я пытаюсь внедрить один класс (простой класс 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и когда я добавляю туда ссылку, ничего не меняется в отношении ошибки. Что я делаю неправильно?

0

Решение

Как отметил 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 не определено в этой части кода по какой-то причине.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector