PHP Вызовите метод экземпляра с call_user_func в том же классе - PullRequest
20 голосов
/ 26 ноября 2010

Я пытаюсь использовать 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' ...

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

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

Ответы [ 3 ]

26 голосов
/ 26 ноября 2010

Код, который вы разместили, должен работать просто отлично.В качестве альтернативы можно использовать «переменные функции» , например:

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;
     }
}
12 голосов
/ 26 ноября 2010

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

<?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 голосов
/ 26 ноября 2010

new MyClass;Должен вернуть 'Hello World' ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...