php - namespace - spl_autoload_register ejemplos
Convertir CamelCase a under_score_case en php__autoload() (2)
Esto no se ha probado, pero he usado algo similar antes para convertir el nombre de la clase. Podría agregar que mi función también se ejecuta en O (n) y no se basa en una referencia lenta.
// lowercase first letter
$class_name[0] = strtolower($class_name[0]);
$len = strlen($class_name);
for ($i = 0; $i < $len; ++$i) {
// see if we have an uppercase character and replace
if (ord($class_name[$i]) > 64 && ord($class_name[$i]) < 91) {
$class_name[$i] = ''_'' . strtolower($class_name[$i]);
// increase length of class and position
++$len;
++$i;
}
}
return $class_name;
Manual de PHP suggests autocargar clases como
function __autoload($class_name){
require_once("some_dir/".$class_name.".php");
}
y este enfoque funciona bien para cargar la clase FooClass
guardada en el archivo my_dir/FooClass.php
like
class FooClass{
//some implementation
}
Pregunta
¿Cómo puedo hacer posible usar la función _autoload()
y acceder a FooClass
guardada en el archivo my_dir/foo_class.php
?
Podrías convertir el nombre de clase como este ...
function __autoload($class_name){
$name = strtolower(preg_replace(''/([a-z])([A-Z])/'', ''$1_$2'', $class_name));
require_once("some_dir/".$name.".php");
}