Déboguer le code PHP de quelqu'un d'autre, je voudrais remplacer sélectivement une de leurs classes. La classe est incluse via:Empêcher PHP require_once de jamais courir
require_once('classname.php');
Mais, cela apparaît à divers endroits dans l'application. Je préfère «simuler» le require_once
, afin qu'il ne soit jamais exécuté du tout. C'est à dire. il suffit de définir class classname
comme je le veux. Ensuite, la prochaine fois que le fichier sera require_once
, il sera marqué comme déjà chargé et donc non rechargé.
Je peux créer moi-même un fichier classname.php, mais je préfère garder les tests que je fais contenus dans un seul fichier, comme je le fais pour d'autres classes, et j'aimerais contrôle plus facile sur le dépassement.
En Perl, ce que je veux faire serait:
$INC{'classname.pm'} = 1;
Yat-il un moyen d'accéder à l'équivalent PHP de %INC
Perl?
Mise à jour: Constamment surpris par ce que PHP ne vous laisse pas faire ...
Ma solution était d'utiliser runkit « s runkit_method_redefine
. Je charge les classes que je tentais pour empêcher le chargement, puis redéfinir toutes les méthodes que je tentais de « faux », par exemple:
require_once('classname.php');
runkit_method_redefine('classname','method','$params','return "testdata";');
Si vous voulez inclure newclass.php à la place de classname.php, pourquoi ne pas ajouter deux lignes au début de classname.php ?: 'require_once 'newclass.php'; return; ' –
Étant donné que je le fais pour de nombreuses classes, je ne veux pas modifier les fichiers de classe d'origine. Et parce que je veux un meilleur contrôle, je préfère avoir une solution non basée sur des fichiers. (c'est-à-dire que je me contenterai probablement d'ajouter un/tmp dir à include_path et de créer uniquement les fichiers de classe que je veux remplacer.) – benizi
Benizi ne vous inquiétez pas Je sais ce que vous voulez dire, et c'est une question importante. Je n'ai rien trouvé en PHP, c'est une langue si limitée.Je n'ai aucune idée de comment cela est devenu si populaire quand Perl existe. Je suppose que les gens sont trop paresseux pour apprendre. – ekerner