PHP4 ya tiene una sintaxis de sobrecarga para establecer asignaciones a modelos de objetos externos, al igual que Java y COM. PHP5 ofrece una poderosa sobrecarga orientada a objetos, lo que permite a los programadores crear comportamientos personalizados para acceder a propiedades y llamar a métodos.
La sobrecarga se puede realizar a través de varios métodos especiales __get, __set y __call. Cuando el motor Zend intenta acceder a un miembro y no puede encontrarlo, PHP llamará a estos métodos.
En el ejemplo de la Figura 1, __get y __set reemplazan todos los accesos a una matriz de variables de atributos. implementar cualquier tipo de filtrado que desee. Por ejemplo, el script puede deshabilitar la configuración de valores de atributos, comenzar con un determinado prefijo o incluir un determinado tipo de valor.
El método __call ilustra cómo llamar a un método indefinido. , el nombre del método y los parámetros recibidos por el método se pasarán al método __call, y PHP pasa el valor de __call al método indefinido
sobrecargando
<?php
.
sobrecargador de clase
{
privado $propiedades = matriz();
función __get($nombre_propiedad)
{
if(isset($this->properties[$property_name]))
{
return($this->properties[$property_name]);
}
demás
{
retorno(NULO);
}
}
función __set($nombre_propiedad, $valor)
{
$this->properties[$property_name] = $valor;
}
función __call($nombre_función, $args)
{
print("Invocando $nombre_función()n");
imprimir("Argumentos: ");
print_r($args);
retorno(VERDADERO);
}
}
$o = new Overloader();
//invocar __set() asigna un valor a una variable de atributo inexistente y activa __set()
$o->dynaProp = "Contenido dinámico";
//invocar __get() activar __get();
print($o->dynaProp . "n");
//invocar __call() activar __call()
$o->dynaMethod("León", "Zeev");
?>
Carga automática de clases
Cuando intentas usar una clase no definida, PHP informará un error fatal. La solución es agregar una clase, que puede incluirse en un archivo. Después de todo, sabes qué clase usar. Proporciona una función de carga automática para clases, lo que puede ahorrar tiempo de programación. Cuando intenta utilizar una clase que PHP no ha organizado, buscará una función global __autoload. Si esta función existe, PHP la llamará con un parámetro. El parámetro es el nombre de la clase.
Ejemplo La Figura 2 ilustra cómo se usa __autoload. Se supone que cada archivo en el directorio actual corresponde a una clase. Cuando el script intenta generar una instancia de la clase Usuario, PHP ejecutará __autoload. La clase Usuario se define en class_User.php Independientemente de si la llamada está en mayúsculas o minúsculas, PHP devolverá el nombre de
la
clase en minúsculas<?php.
//definir función de carga automática
función __autocarga($clase)
{
include("class_" . ucfirst($clase) . ".php");
}
//usa una clase que debe cargarse automáticamente
$u = nuevo usuario;
$u->nombre = "León";
$u->imprimirNombre();
?>