Вызов метода класса - Ошибка Function name must be a string

Статус
В этой теме нельзя размещать новые ответы.

Q_BASIC

Хранитель порядка
Регистрация
30 Ноя 2013
Сообщения
516
Реакции
1.240
Приветствую,

Код:
PHP:
$controller = $route->get_controller();

if(!$controller)
{
    $hooks->call_hook('show_404');
    show_404();
}

var_dump($controller);

$hooks->call_hook('start_step_1');

$_CONTROLLER = new $controller['class'];

$hooks->call_hook('start_step_2');

var_dump($controller['function']);
$_CONTROLLER->$controller['function']();

$_CONTROLLER->__end();

Вывод:
Код:
array(3) {
  ["file"]=>
  string(77) "/public_html/app/controllers/site.ru/welcome.php"
  ["class"]=>
  string(7) "welcome"
  ["function"]=>
  string(5) "index"
}
string(5) "index"

Fatal error: Uncaught Error: Function name must be a string in /public_html/app/init.php:65
Stack trace:
#0 /public_html/index.php(40): require()
#1 {main}
  thrown in /public_html/app/init.php on line 65

Ошибка тут: $_CONTROLLER->$controller['function']();

Говорит что там надо строку, как имя функции, но там и так строка (index).

Что не так?
 
Такой вызов применим только к 5 ветке:
Для просмотра ссылки Войди или Зарегистрируйся

Можно выносить в переменную перед вызовом:
PHP:
$arr = array('fu' => 'bar');
class Fu {
  public function bar() {
    return __METHOD__;
  }
}
$fu = new Fu();
$method = $arr['fu'];
var_dump(    $fu->$method()    ); //string(7) "Fu::bar"
Для просмотра ссылки Войди или Зарегистрируйся

Но еще лучше использовать call_user_func:
PHP:
$arr = array('fu' => 'bar');
class Fu {
  public function bar() {
    return __METHOD__;
  }
}
$fu = new Fu();

var_dump(    call_user_func(array($fu, $arr['fu']))     );
Для просмотра ссылки Войди или Зарегистрируйся
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху