-
Notifications
You must be signed in to change notification settings - Fork 0
5 autoload en php
Como norma general es una buena idea guardar las clases PHP en archivos separados, con una clase por cada archivo. Por ejemplo si tenemos un foro, tendríamos la clase User dentro del archivo User.php, y la clase Topic en el archivo Topic.php. Lo normal es poner estos archivos de clases en una carpeta de la aplicación:
classes/
User.php
Topic.phpAntes de que apareciera autoload, si se necesitaba usar una de las clases anteriores, primero se incluía con include o require:
require_once("classes/User.php");
$usuario = new User();Muy probablemente User.php no sería el único archivo a incluir, por lo que se solían generar largas listas con include y require.
El mantener las clases separadas y organizadas permite utilizar el autoloading. Para ello, se crea una función __autoload() en el arranque de la aplicación. Entonces, cuando el código intente crear una instancia que PHP desconoce todavía, PHP llamará automáticamente a la función __autoload(), pasándole el nombre de la clase que está intentando instanciar. El objetivo de la función es localizar e incluir el archivo de la clase. PHP ahora podrá entonces cargar la clase que antes desconocía, y crear el objeto.
Ejemplo de función autoload:
function __autoload($nombreClase) {
$nombreClase = strtolower($nombreClase);
$directorio = "classes/{$nombreClase}.php";
if(file_exists($directorio)) {
require_once($directorio);
} else {
die("El archivo {$nombreClase}.php no se ha podido encontrar.");
}
}Ahora todas las clases que se encuentren en el directorio /classes se cargarán (siempre y cuando el archivo tenga el mismo nombre que la clase a la cual se llama).
Existe una alternativa mejor y más flexible mediante la función spl_autoload_register() (de hecho es posible que la función __autoload() quede obsoleta y sea eliminada en el futuro). spl_autoload_register() acepta una función callable como parámetro donde se puede definir una lógica concreta para la carga de clases. Con spl_autoload_register() es posible definir varias funciones para la carga de clases (lo que no es posible con __autoload()):
function miAutoloadUno($clase){
require "/directorio/.$clase.php";
}
function miAutoloadDos($clase){
require "/otroDirectorio/.$clase.php";
}
spl_autoload_register("autoloadUno");
spl_autoload_register("autoloadDos");Algunas otras funciones útiles de spl_autoload:
- spl_autoload_extensions(), permite especificar las extensiones de los archivos que se quieren cargar.
- spl_autoload_unregister(), permite desregistrar una función dada como implementación de __autoload().
- spl_autoload_functions(), devuelve todas las funciones __autoload() registradas.
Desde PHP 5.3 es posible el uso de namespaces en PHP. Un namespace permite crear un nombre de directorio para un archivo y luego éste puede ser referenciado desde cualquier parte del script.
El estándar PSR-4 permite enlazar los namespaces con directorios de carpetas reales. En la actualidad es lo más cómodo utilizar** composer** (o un autoloader de algún framework) para el manejo de la carga de clases automática, y usar el estándar PSR-4 (actualmente el más recomendado). Si por ejemplo tenemos la siguiente estructura:
/app
/public
/src
Usuario.php
Topic.php
/vendorSuponemos que el namespace Proyecto se encuentra en /src. El directorio /src representaría el nivel más alto del namespace. Si utilizamos composer para cargar las clases, simplemente hay que decirle a composer cómo cargarlas. Vamos a indicarle que utilice el estándar PSR-4 desde composer.json:
{
"autoload": {
"psr-4":{
"Proyecto\\": "src/"
}
}
}Para más información del autoloading en composer, puedes visitar la documentación.
| Anterior | Siguiente |
@intelguasoft - Full Stack Developer
| Versión: | 0.0.3-beta |
El curso está organizado según las temáticas indicadas en la página oficial de Rogue Wave Zend para la certificación de PHP.
Esta curso no tiene ninguna relación con Zend. |
|---|---|---|
| Fecha: | 28.11.2018 |
Básicos
Sintaxis básicaOperadores
Operadores bit a bit
Variables
Estructuras de control
Constantes y constructores base
Espacio de nombres
Extensiones
Configuraciones
Variables al descubierto
Recolector de basuras
Rendimiento (Performance)
Funciones
FuncionesArgumentos en funciones
Funciones variables
Valores por referencia en funciones
Funciones que devuelven algo
Ámbito de variables
Funciones anónimas y closure's
Cadenas y patrones
Las comillas y las cadenas de caracteresHeredoc y Nowdoc
Comparando cadenas de caracteres
Extracción en cadenas de caracteres
Análisis en cadenas de caracteres
Reemplazos en cadenas de caracteres
Formato de cadena de caracteres
Expresiones regulares (RegEx)
Codificación de caracteres
Codificación en cadenas de caracteres
Arreglos (Array's)
ArreglosArreglos asociativos
Iterar arreglos
Funciones de arreglos
SPL Arreglos mediante objetos
Conversión de arreglos
Archivos (I/O)
Manejo de archivosLectura de archivos
Escritura de archivos
Funciones del sistema de archivos
Socket's y archivos
Streams (?)
Seguridad
Concepto y funcionamiento CGIConfigurando la seguridad
Seguridad en Sesiones
Ataques XSS
Ataques CSRF
Ataques SQLInjection
Ataques CodeInjection
Ataques EmailInjection
Filtrado de datos de entrada
Escape de datos de salida
Encriptación y contraseñas
Seguridad en el almacenamiento de datos
Seguridad en la subida de datos
SSL y OpenSSL
Base de datos
Principios básicos SQLLos joins en SQL
Principales funciones SQL
Preparando sentencias SQL
Transacciones en SQL
Algo de PDO
Programación Orientada a Objetos
Instancias de clasesModificadores y herencia de clases
Interfaces
Excepciones
Auto-carga (Autoload)
Reflexión (Reflection)
Determinación de tipos (Type hinting)
Constantes de clase
Enlace estático de ejecución (Late Static Binding)
Métodos mágicos
Librería estándar PHP (SPL)
Generadores (Generators)
Traits
Clases abstractas
Formatos de información
Algo de XMLAlgo de SimpleXML
Algo de XML Parser
Algo de PHP DOM
Algo de Web Services
Web Services con SOAP
Algo de REST
Algo de JSON
Formato de fecha y hora
Características web's
SesionesFormularios
Métodos GET y POST
Cookies
Protocolo HTTP y sus headers
Autenticación HTTP
Códigos de estado HTTP