Question

J'utilise un hack ge_called_class pour permettre la liaison tardive statique dans la version php 5.2 (trouvés ici ).

Je suit dans mon code:

# db_record.php
$ac = "ForumThread";
$objects = $ac::find("all");

Cela ne fonctionnera pas en php 5.2 pour une raison quelconque, donc je l'ai fait:

# db_record.php
$ac = "ForumThread";
eval("\$objects = {$ac}::find('all');");

d'autre part ne fonctionnera pas avec la fonction get_called_class. Je reçois une erreur que la fonction file ne peut pas lire la section evaled de code.

Était-ce utile?

La solution

Si vous utilisez eval, votre solution est fausse.

Pourquoi pas votre travail de version non-eval? Qu'est-ce qui ne va pas? Quel est le message d'erreur pleine et entière?

La version suppled utilisateur de get_called_class effectue une backtrace et tente d'ouvrir le dossier de l'appelant pour déterminer le nom de la classe. La raison pour laquelle l'eval échoue est parce que le backtrace eval ne fournit pas un nom de fichier.

(Edit:.? De plus, ce hack get_called_class est très bien un hack Y at-il une raison que vous ne pouvez pas utiliser 5.3)

Avez-vous essayé d'utiliser call_user_func ? call_user_func(array($ac, 'find'), 'all') devrait appeler la méthode find statique pour le nom de la classe contenue dans $ac avec le 'all' de paramater. Voir aussi la rappel pseudo-type et la exemple "type 2" dans spécifique

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top