Приветствую всех. Никак не могу понять в чем существенная разница, объясните, пожалуйста. В двух словах (код ниже), создается собственный класс, в котором на основе сторонних классов и методов в конструкторе инициализируются некоторые свойства, одно из которых есть класс. Далее в методе класса (add2) осуществляется обращение к статическому методу стороннего класса, который символизирует объявленное в конструкторе свойство, указанное выше. Но при таком подходе получается ошибка (см. в коде). Если же в методе (add1) непосредственно получить переменную-класс и уже с нее отработать статический метод стороннего класса, то все прекрасно отрабатывается. Может быть нужен какой-то особенный синтаксис? Но ничего подобного не нашел, подскажите, пожалуйста, если решение в принципе существует. PHP: use Vendor\Main\EntityTableClass as ETC; class MyEntity { //Свойства protected $objEntity; protected $dataClass; //Конструктор function __construct($tablename){ $objTable = ETC::getByName($tablename); $this->objEntity = ETC::compileEntity($objTable); $this->dataClass = $this->objEntity->getDataClass(); } //отрабатывает корректно function add1($arParams){ $classEntity = $this->objEntity->getDataClass(); $res = $classEntity::add($arParams); return $res; } //выдает ошибку: //Parse error: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM) in /data/local/myclasses/main/myentity.php on line 24 function add2($arParams){ $res = $this->dataClass::add($arParams); return $res; } }
Без описания класса Vendor\Main\EntityTableClass понять сложно, что у Вас там творится в $this->objEntity
Если подразумевается "имя класса", то сойдет такая конструкция: PHP: $res = call_user_func([$this->dataClass, 'add'], $arParams);
В $this->objEntity творится то же самое, что и в $classEntity. var_dump, по крайней мере, дает идентичный результат для одного и другого. С другой стороны, а какие возможны варианты, что при передаче через свойство класса та же самая информация "теряется"? Или это все же php не приемлет такой конструкции ***->***:: ??? Сообщение об ошибке именно об этом же по-еврейски )) говорит.