Вопрос писать даже стыдно ибо простой но я уже все методы перепробовал и туплю предположим есть строка PHP: $obj = Class::getObj(); Так вот вопрос в том как мне формировать имя класса динамически и что бы обращение к классу выполнялось. В лучшем случае я получал в переменной $obj строку причем правильно сформированную но всего лишь строку а не результат работы класса в худшем ошибки.
Привожу кусок кода PHP: <?php $controller = 'Controller'.ucfirst($moduleData['class']); $action = $controller.'::'.$moduleData['action']; $perms = empty($moduleData['permissions'])?'root':$moduleData['permissions']; //check method accessibility if(!class_exists($controller) || !method_exists($controller, $moduleData['action']) || !is_callable(array($controller, $moduleData['action']))) parent::doRedirect('onmain', true); //check permissions and run module $this->runModule($controller::$moduleData['action'](), $this->checkAccess($perms));
Так я тоже побывал но не выходит, не знаю почему PHP: $var = 'Class'; $var2 = 'getObj'; $obj = $var.'::'.$var2(); Выдает: Fatal error: Call to undefined function getObj() Если делать так: PHP: $obj = $var::$var2(); То выдает другую ошибку Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM Если просто руками пропишу к прмиеру Class::getObj() все работает на ура. Не могу вкурить в чем проблема.
NR55RU возможно у тебя версия пхп не поддерживает синтаксис $var::$var2(); http://php.net/manual/en/function.call-user-func.html должен помочь
О да БИГ спасибо, заработало и заодно узнал о существовании такой функции. А то я думал что я совсем торможу PHP: <?php $obj = call_user_func_array($var.'::getObj', array($value1, $value2)); // Даже с передачей параметров ?> У меня на хостинге ПХП версии PHP 5.2.10 (свежее пока не дают). Видимо посему и не работало как должно было.
NR55RU У меня на хостинге ПХП версии PHP 5.2.10 (свежее пока не дают) не понимаю я такого поведения. Что значит "не дают"? Почему ты еще с ними? Я не понимаю вобще что такое "не дают" если деньги платишь ты. Ты за то и платишь, чтобы давали. И даже брали. И даже без вазилина. =) Работа у них такая, они сами на ее подвизались. Вали от них. Они дубы.
Я напоролся на это в Доктрине, когда класс тебе возвращает имя модели, к которой надо обратиться как: Класс::строка_с_именем_модели(); Кто-то под РНР 5.3 переписал, у меня на компе работало, а в самый необходимый день на хостинге оно сломалось.
admyx нэ знаю. я знаю что в пхп 5.3 появился могучий фетч_аррей_олл и этого достаточно чтобы перейти на эту версию