Convertir CamelCase pour under_score_case en php __autoload()
Manuel PHP suggère d'auto-chargement des classes comme
function __autoload($class_name){
require_once("some_dir/".$class_name.".php");
}
et cette approche fonctionne très bien à la classe de charge FooClass
enregistrées dans le fichier my_dir/FooClass.php
comme
class FooClass{
//some implementation
}
Question
Comment puis-je rendre possible l'utilisation de _autoload()
de la fonction et de l'accès FooClass
enregistrées dans le fichier my_dir/foo_class.php
?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez convertir le nom de la classe comme ça...
strtolower(preg_replace('/(?<!^)([A-Z])/', '_$1', $class_name))
. La seule différence entre ça et la réponse fournie par @rik-heywood est que MyCClassName devient my_c_class_name au lieu de my_cclass_name.FooBARBazAndTHeLike => foo_bar_baz_and_t_he_like
, vous pouvez utiliser (mais qui ne devrait pas!)strtolower(preg_replace('/((?<=[a-z])[A-Z])|((?<=[A-Z])[A-Z](?=[a-z]))/', _$1$2, $class_name))
. phpliveregex.com/p/dqiCe n'est pas testé, mais j'ai utilisé quelque chose de semblable avant de convertir le nom de la classe. Je pourrais ajouter que ma fonction s'exécute en O(n) et de ne pas compter sur le lent backreferencing.