Ответ 1
Вместо "создания" функций вы можете использовать магический метод __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
DEMO: 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