Динамически создавать функции класса PHP

Я хотел бы перебирать массив и динамически создавать функции на основе каждого элемента. Мой псевдокод:

$array = array('one', 'two', 'three'); foreach ($array as $item) { public function $item() { return 'Test'.$item; } } 

Как мне это сделать?

Вместо «создания» функций вы можете использовать магический метод __call() , так что, когда вы вызываете «несуществующую» функцию, вы можете справиться с ней и выполнить правильное действие.

Что-то вроде этого:

 class MyClass{ private $array = array('one', 'two', 'three'); function __call($func, $params){ if(in_array($func, $this->array)){ return 'Test'.$func; } } } 

Затем вы можете позвонить:

 $a = new MyClass; $a->one(); // Testone $a->four(); // null 

ДЕМО: http://ideone.com/73mSh

EDIT : Если вы используете PHP 5.3+, вы действительно можете делать то, что вы пытаетесь сделать в своем вопросе!

 class MyClass{ private $array = array('one', 'two', 'three'); function __construct(){ foreach ($this->array as $item) { $this->$item = function() use($item){ return 'Test'.$item; }; } } } 

Это работает, за исключением того, что вы не можете напрямую вызвать $a->one() , вам нужно сохранить его как переменную .

 $a = new MyClass; $x = $a->one; $x() // Testone 

ДЕМО: http://codepad.viper-7.com/ayGsTu

 class MethodTest { private $_methods = array(); public function __call($name, $arguments) { if (array_key_exists($name, $this->_methods)) { $this->_methods[$name]($arguments); } else { $this->_methods[$name] = $arguments[0]; } } } $obj = new MethodTest; $array = array('one', 'two', 'three'); foreach ($array as $item) { // Dynamic creation $obj->$item((function ($a){ echo "Test: ".$a[0]."\n"; })); // Calling $obj->$item($item); } 

Вышеприведенный пример выводит:

 Test: one Test: two Test: three 

Не уверен в использовании в вашем случае, вы можете использовать create_function для создания анонимных функций.