Подтвердить что ты не робот

PHP Вызов метода экземпляра с помощью call_user_func в том же классе

Я пытаюсь использовать call_user_func для вызова метода из другого метода того же объекта, например.

class MyClass
{
    public function __construct()
    {
        $this->foo('bar');
    }
    public function foo($method)
    {
        return call_user_func(array($this, $method), 'Hello World');
    }

    public function bar($message)
    {
        echo $message;
    }
}

new MyClass; Должен возвращать "Hello World"...

Кто-нибудь знает правильный способ достичь этого?

Большое спасибо!

4b9b3361

Ответ 1

Код, который вы опубликовали, должен работать нормально. Альтернативой было бы использовать "функции переменных" следующим образом:

public function foo($method)
{
     //safety first - you might not need this if the $method
     //parameter is tightly controlled....
     if (method_exists($this, $method))
     {
         return $this->$method('Hello World');
     }
     else
     {
         //oh dear - handle this situation in whatever way
         //is appropriate
         return null;
     }
}

Ответ 2

Это работает для меня:

<?php
class MyClass
{
    public function __construct()
    {
        $this->foo('bar');
    }
    public function foo($method)
    {
        return call_user_func(array($this, $method), 'Hello World');
    }

    public function bar($message)
    {
        echo $message;
    }
}

$mc = new MyClass();
?>

Это распечатывается:

wraith:Downloads mwilliamson$ php userfunc_test.php 
    Hello World

Ответ 3

новый MyClass; Должен возвращать "Hello World"...

Конструктор ничего не возвращает.