Всем КУ! Как правильно оформить вызов Хочу сделать вместо вызова функции Код (PHP): $this->_foo('bar'); вызов функции в зависимости от переданной переменной в $foo Код (PHP): $foo='foo'; $this->_{$foo}('bar'); Как правильно оформить вызов? На $this->_{$foo}('bar'); интепритатор ругается PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
Киньте ссылку на мануал про эти фигурные скобки. А то не первый раз их вижу, а что такое не знаю. Добавлено спустя 31 минуту 4 секунды: Сам я найти не смог
ссылка не по теме Добавлено спустя 2 минуты 40 секунд: вот по теме http://php.net/manual/ru/functions.variable-functions
? не понял тебя. machetero спросил про фигурные скобки, которые присутствуют в листингах выше (при вызовах функций). в твоей ссылке про это и слова нет, а это, если Я не ошибаюсь, как раз таки сложный синтаксис, который Я и скинул.
iNEEdhLw , сосредоточься. ты дал ссылку про строки в двойных кавычках. а топикстартер хочет обратиться к функции по имени из переменной. Добавлено спустя 2 минуты 8 секунд: vegarulez_f, в этом месте нельзя кусок имени оставить за скобками! твоя переменная $foo должна содержать имя метода полностью, включая символ подчеркивания! или помести всё выражение со склейкой строк внутрь фигурных скобок. Код (PHP): $this->$foo('bar'); // считаем, что в $foo уже есть всё, что надо $this->{'_'.$foo}('bar'); // иначе вся фигня должна вычисляться внутри скобок
Спасибо. То, что доктор прописал. Удобная вещь - когда надо обращаться к функциямб экшинам и т.п. внутри класса по их названию например, если таковое имеется в контролере ( kohana feat). Например чел набрал у тебя на стрничке http://site.ru/foo/bar ты сделал единый обработчик страниц и в зависимости от контролера и экшина отсылаешь его на нужный приватный обработчик внутри класса контролера, вызывая нужную вьюху, а если такого обработчика экшина нет то идешь на функцию по умолчанию и вызываешь вьюху по умлочанию. Чтобы не писать один и тот же код для разных экшинов которые используют вьюхи экшинов. Код (Text): private function _controler_actions($payer='0') { if (method_exists(__CLASS__,'_'.Request::current()->param('id'))) { $this->{'_'.Request::current()->param('id')}($payer); return; } $this->_build_view(); $this->_view_action_data($payer); }
Это php.net и есть ) Вкратце, логика работы переменных переменных при вызове функций и методов изменилась в 7 версии, следует обратить внимание, дабы в будущем все хитрым образом не сломалось.