Я пытаюсь использовать 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» …
Кто-нибудь знает правильный способ достичь этого?
Большое спасибо!
Код, который вы опубликовали, должен работать нормально. Альтернативой было бы использовать «переменные функции», подобные этому:
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; } }
Это работает для меня:
<?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
новый MyClass; Должен возвращать «Hello World» …
Конструктор ничего не возвращает.