Мое я и еще один разработчик установили Lamp на две отдельные системы (Ubuntu & OSX), и по какой-то нечеткой причине пакет, который мы разрабатываем, больше не работает на PHP 5.5 (5.5 +0,9 в моем случае)Невозможно использовать переменные переменные для выполнения функции в PHP 5.5
Одна из областей, в частности, является:
if (method_exists($this, 'hook_' . __FUNCTION__)) {
$this->{'hook_' . __FUNCTION__}();
}
Приведенные выше результаты кода в ошибке, заявляющие о том, что метод с именем hook_xxx
не существует, однако, если мы заменим код:
if (method_exists($this, 'hook_' . __FUNCTION__)) {
call_user_func(array($this, 'hook_' . __FUNCTION__));
}
Он отлично работает.
В довершение, это работает на PHP 5.4.33 ..
Я только что провел 2 дня fannying вокруг с PHPBrew и т.д., пытаясь получить PHP 5.4.33 правильно установлен и думаю, что решение на самом деле пытается чтобы выяснить, почему это в первую очередь.
Любые идеи?
Благодаря
Gavin
Ошибки я получаю:
Call to undefined method LocalController::hook_index()
Где у меня есть:
<?php
class Controller
{
public function index() {
echo 'Parent index called';
if (method_exists($this, 'hook_' . __FUNCTION__)) {
$this->{'hook_' . __FUNCTION__}();
}
}
}
class LocalController extends Controller
{
public function hook_index() {
echo 'Child index called';
}
}
приложение это сам будет загружать в контроллер и то, если оно существует, i t будет загружаться в LocalController.
Это все работает нормально на 5.4, или если я меняю его на использование call_user_func, однако в противном случае умирает с вышеуказанной ошибкой.
Какова точная ошибка, что вы получаете? – infomaniac
Работает для меня, Mac OS X работает PHP 5.5.14. –
Я полагаю, что это действительно поможет;) См. Выше – Gavin