Invece di "creare" funzioni, è possibile utilizzare il metodo magico __call()
, in modo che quando si chiama una funzione "inesistente", è possibile gestirlo e fare la giusta azione.
Qualcosa di simile a questo:
class MyClass{
private $array = array('one', 'two', 'three');
function __call($func, $params){
if(in_array($func, $this->array)){
return 'Test'.$func;
}
}
}
quindi è possibile chiamare:
$a = new MyClass;
$a->one(); // Testone
$a->four(); // null
DEMO: http://ideone.com/73mSh
EDIT: Se si sta utilizzando PHP 5.3+, è effettivamente possibile fai quello che stai cercando di fare nella tua domanda!
class MyClass{
private $array = array('one', 'two', 'three');
function __construct(){
foreach ($this->array as $item) {
$this->$item = function() use($item){
return 'Test'.$item;
};
}
}
}
Questo funziona, solo che non si può chiamare $a->one()
direttamente, è necessario save it as a variable.
$a = new MyClass;
$x = $a->one;
$x() // Testone
DEMO: http://codepad.viper-7.com/ayGsTu
fonte
2012-10-12 22:44:17
Posso chiedere perché si vuole creare questa funziona – Baba
PHP non funziona così. – hakre
L'aggiunta di troppa dinamica può rendere illeggibile un programma, il che equivale a non mantenibile. Puoi entrare nei dettagli di ciò che hai e di ciò che vuoi ottenere? – Sven