Имя класса должно быть допустимым объектом или строкой - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь внедрить один класс (простой класс 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 голосов
/ 17 декабря 2018

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

...