Ceci est en quelque sorte une suite à une question précédente - mais j'ai distillé la question et ai les cas "fonctionne" contre "ne fonctionne pas" rétréci beaucoup plus précisément.PHP create_function Variable d'instance - Impossible d'appeler la fonction anonyme: Suivi
Mon objectif: J'ai une classe MyClass
qui a une variable d'instance myFunction
. Lors de la création d'un objet MyClass
(instanciation), le constructeur affecte la variable d'instance myFunction
au résultat d'un appel à create_function
(où le code et les arguments proviennent d'un appel db).
Une fois cet objet de type MyClass
est créé (et stocké comme une variable d'instance d'une autre classe ailleurs) Je veux être en mesure d'appeler myFunction
(l'instance fonction anonyme variable) de « nulle part » que j'ai l'objet MyClass
.
cas expérimentaux - ci-dessous est mon code de test très simplifié pour illustrer ce qui fonctionne par rapport à ce qui ne fonctionne pas (lorsque les sauts de fonctionnalités attendues)
class MyClass extends AnotherClass {
public $myFunction;
function __construct() {
$functionCode = 'echo "NyanNyanNyan";';
$this->myFunction();
/*Now the following code works as expected if put in here for testing*/
$anonFunc = $this->myFunction;
$anonFunc(); //This call works just fine (echos to page)!
/*And if i make this call, it works too! */
self::TestCallAnon();
}
public function TestCallAnon() {
$anonFunc2 = $this->myFunction;
$anonFunc2();
}
}
Cependant, si je les éléments suivants (dans un autre fichier, il dit des erreurs undefined function() dans ... dans le journal des erreurs Apache.
//I'm using Yii framework, and this is getting the user
//objects instance variable 'myClass'.
$object = Yii::app()->user->myClass;
$object->TestCallAnon(); // **FAILS**
ou
$func = $object->myFunction;
$func(); // ** ALSO FAILS **
En outre, plusieurs variantes d'appels à call_user_func
et call_user_func_array
ne fonctionnent pas.
Si quelqu'un est en mesure d'offrir un aperçu ou de l'aide qui serait génial :).
Merci d'avance!
Salut merci pour votre suggestion. J'ai essayé 'call_user_func (array ($ object, $ funcName), array())' sans succès. Ce sont des erreurs qui disent que les comportements n'ont pas de méthode ou de fermeture nommée "". ', Ce qui implique que $ funcName est vide je suppose? Mais quand j'écho $ funcName une ligne au-dessus de ça, ça me donne "lambda_3". – csjohn
Cela ne ressemble pas à l'erreur PHP que vous obtiendriez de 'call_user_func'. – Halcyon