За последние 24 часа нас посетили 20280 программистов и 1608 роботов. Сейчас ищут 1846 программистов ...

Как правильно оформить вызов $this->_{$foo}('bar')

Тема в разделе "PHP для новичков", создана пользователем vegarulez_f, 2 авг 2015.

  1. vegarulez_f

    vegarulez_f Новичок

    С нами с:
    16 апр 2015
    Сообщения:
    37
    Симпатии:
    0
    Всем КУ!

    Как правильно оформить вызов

    Хочу сделать вместо вызова функции

    Код (PHP):
    1. $this->_foo('bar'); 
    вызов функции в зависимости от переданной переменной в $foo

    Код (PHP):
    1. $foo='foo';
    2. $this->_{$foo}('bar'); 
    Как правильно оформить вызов? На $this->_{$foo}('bar'); интепритатор ругается

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Потому что хрень пишите, поэтому и ругается.
    Код (Text):
    1.  
    2. $foo='_foo';
    3. $this->{$foo}('bar');
     
  3. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Киньте ссылку на мануал про эти фигурные скобки. А то не первый раз их вижу, а что такое не знаю.

    Добавлено спустя 31 минуту 4 секунды:
    Сам я найти не смог
     
  4. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    листайдо "сложный(фигурный) синтаксис"
    правда мне не особо понятно зачем он.
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.119
    Симпатии:
    1.245
    Адрес:
    там-сям
  6. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    ?
    не понял тебя. machetero спросил про фигурные скобки, которые присутствуют в листингах выше (при вызовах функций). в твоей ссылке про это и слова нет, а это, если Я не ошибаюсь, как раз таки сложный синтаксис, который Я и скинул.
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.119
    Симпатии:
    1.245
    Адрес:
    там-сям
    iNEEdhLw , сосредоточься. ты дал ссылку про строки в двойных кавычках. а топикстартер хочет обратиться к функции по имени из переменной.

    Добавлено спустя 2 минуты 8 секунд:
    vegarulez_f, в этом месте нельзя кусок имени оставить за скобками! твоя переменная $foo должна содержать имя метода полностью, включая символ подчеркивания!
    или помести всё выражение со склейкой строк внутрь фигурных скобок.
    Код (PHP):
    1. $this->$foo('bar'); // считаем, что в $foo уже есть всё, что надо
    2. $this->{'_'.$foo}('bar'); // иначе вся фигня должна вычисляться внутри скобок 
     
  8. vegarulez_f

    vegarulez_f Новичок

    С нами с:
    16 апр 2015
    Сообщения:
    37
    Симпатии:
    0
    Спасибо. То, что доктор прописал.

    Удобная вещь - когда надо обращаться к функциямб экшинам и т.п. внутри класса по их названию например, если таковое имеется в контролере ( kohana feat).
    Например чел набрал у тебя на стрничке http://site.ru/foo/bar ты сделал единый обработчик страниц и в зависимости от контролера и экшина отсылаешь его на нужный приватный обработчик внутри класса контролера, вызывая нужную вьюху, а если такого обработчика экшина нет то идешь на функцию по умолчанию и вызываешь вьюху по умлочанию. Чтобы не писать один и тот же код для разных экшинов которые используют вьюхи экшинов.
    Код (Text):
    1.  
    2.    private function _controler_actions($payer='0')
    3.     {
    4.         if (method_exists(__CLASS__,'_'.Request::current()->param('id'))) {
    5.             $this->{'_'.Request::current()->param('id')}($payer);
    6.             return;
    7.         }
    8.  
    9.         $this->_build_view();
    10.         $this->_view_action_data($payer);
    11.     }
     
  9. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
  10. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    romach, еще один парсер php.net? ))
     
  11. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Это php.net и есть ) Вкратце, логика работы переменных переменных при вызове функций и методов изменилась в 7 версии, следует обратить внимание, дабы в будущем все хитрым образом не сломалось.
     
  12. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    romach а нету этого на русском ? Мне моего англ не хватило.
     
  13. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
  14. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    СПС