usar spl_autoload_register psr namespace ejemplos como coding __autoload php class interface include autoload

php - spl_autoload_register - psr-4



autoload differnece entre clase y interfaz php (3)

Debería tener algunas convenciones de nomenclatura para sus clases e interfaces, por ejemplo, su nombre de clase es de logon y el nombre de la interfaz, interfaz de logon , luego puede diferenciar fácilmente entre los dos. Por ejemplo, explote $name por guión bajo y verifique si el último elemento es la interface .

Estoy buscando el siguiente problema que tengo. Los nombres de los archivos de clase de nuestro proyecto se llaman logon.class.php. Pero el archivo de interfaz para esa clase se llama logon.interface.php

Mi problema es que, cuando se ejecute el método de autocarga, debería poder detectar si se trata de una llamada de clase o una llamada de interfaz.

<?php function __autoload($name){ if($name === is_class){ include_once($name.''class.php''); }elseif ($name === is_interface){ include_once($name.''interface.php''); } } ?>


Puede usar ReflectionClass :: isInterface para determinar si la clase es una interfaz.

$reflection = new ReflectionClass($name); if ($reflection->isInterface()){ //Is an interface }else{ //Not an interface }

En su caso, probablemente tenga que usar file_exist primero en $name.interface.php y $name.class.php para determinar si existen, requerir el que existe, luego verificar si se trata de una interfaz.

Sin embargo, mi opinión es que esto podría causar problemas en el camino. ¿Qué pasa si tiene MyClass.class.php y MyClass.interface.php ?


Para evitar conflictos de nombres de clase, puede usar espacios de nombres. Verifique las especificaciones del PSR-0.

También revisa esta publicación . Si lee los contenidos del archivo antes de incluirlo, puede ponerlo en el token y determinar si el archivo contiene una interfaz o una clase, sin cargar realmente la clase / interfaz. Tenga en cuenta que las interfaces y las clases no pueden tener el mismo nombre

Nota: Usando este método, puedes cambiar el nombre de la interfaz en tiempo de ejecución (antes de cargar la clase, aunque eso parece una muy buena práctica)