Я пытаюсь вернуть значение из метода в качестве ссылки в PHP5.3. Возможно, я иду по этому совершенно неправильному пути, но я ускоряю работу над старым проектом с некоторыми новыми функциями 5.3+.
Ниже приведен пример, который я описал, чтобы объяснить, что происходит:
class Foo
{
static $foobar = 5;
function &bar()
{
return self::$foobar;
}
}
// Doesn't work
//$test1 = &call_user_func_array(array("Foo","bar"),array());
// Doesn't work
//$test1 = &call_user_func_array("Foo::bar",array());
// Doesn't work
//$f = new Foo; $test1 = &call_user_func_array(array($f,"bar"),array());
// WORKS
//$test1 = &Foo::bar();
//Doesn't work
//$function = "Foo::bar";
//$test1 = &$function();
// WORKS
$f = new Foo; $test1 = &$f->bar();
$test2 = Foo::bar();
var_dump($test1);
var_dump($test2);
$test1 = 10;
echo "----------<br />";
var_dump($test1);
var_dump($test2);
var_dump(Foo::bar()); //returns 10 when working, 5 when not working
Самый последний Foo::bar()
должен возвращать 10, так как $test1
должен быть ссылкой на Foo::$foobar
, когда все работает.
Я понимаю, что в этом примере также используется какой-то устаревший PHP-вызов Foo::bar
и метод bar()
не указан как статический, но все еще может вызываться через ::
Любая помощь будет принята с благодарностью, так как единственное исправление, которое у меня есть, - это просто установить switch
в списке аргументов и вызывать метод напрямую, исходя из количества существующих аргументов.