En lugar de "crear" funciones, puede utilizar el método mágico __call()
, de modo que cuando llame a una función "inexistente", puede manejarlo y realizar la acción correcta.
Algo como esto:
class MyClass{
private $array = array('one', 'two', 'three');
function __call($func, $params){
if(in_array($func, $this->array)){
return 'Test'.$func;
}
}
}
A continuación, puede llamar a:
$a = new MyClass;
$a->one(); // Testone
$a->four(); // null
DEMO: http://ideone.com/73mSh
EDITAR: Si está usando PHP 5.3+, en realidad se puede haz lo que tratas de hacer en tu pregunta!
class MyClass{
private $array = array('one', 'two', 'three');
function __construct(){
foreach ($this->array as $item) {
$this->$item = function() use($item){
return 'Test'.$item;
};
}
}
}
Esto funciona, excepto que no se puede llamar directamente $a->one()
, es necesario save it as a variable.
$a = new MyClass;
$x = $a->one;
$x() // Testone
DEMO: http://codepad.viper-7.com/ayGsTu
¿Puedo preguntar por qué desea crear este funciona – Baba
PHP no funciona así. – hakre
Agregar demasiada dinámica puede hacer que un programa sea ilegible, lo que es equivalente a no serlo. ¿Puedes entrar en detalles de lo que tienes y lo que quieres obtener? – Sven