Instead of "creating" functions, you can use the magic method __call()
, so that when you call a "non-existent" function, you can handle it and do the right action.
Something like this:
class MyClass{
private $array = array('one', 'two', 'three');
function __call($func, $params){
if(in_array($func, $this->array)){
return 'Test'.$func;
}
}
}
Then you can call:
$a = new MyClass;
$a->one(); // Testone
$a->four(); // null
DEMO: http://ideone.com/73mSh
EDIT: If you are using PHP 5.3+, you actually can do what you are trying to do in your question!
class MyClass{
private $array = array('one', 'two', 'three');
function __construct(){
foreach ($this->array as $item) {
$this->$item = function() use($item){
return 'Test'.$item;
};
}
}
}
This does work, except that you can't call $a->one()
directly, you need to save it as a variable.
$a = new MyClass;
$x = $a->one;
$x() // Testone
DEMO: http://codepad.viper-7.com/ayGsTu