Resumen: En este artículo, el autor nos muestra varias tecnologías avanzadas de programación orientada a objetos en PHP a través de ejemplos basados en su comprensión de los conceptos de programación orientada a objetos. Como dijo el autor, "la imaginación es la única limitación,
entonces yo
".Se mostrarán técnicas más avanzadas.
Serializar (Serializar)
PHP no admite objetos persistentes En programación orientada a objetos, un objeto persistente es un objeto que puede mantener el estado y la funcionalidad entre referencias en múltiples aplicaciones. Esto significa tener la capacidad de guardar el objeto en un archivo o base de datos y cargarlo. objeto más tarde. Este es el llamado mecanismo de serialización. PHP tiene un método de serialización que se puede invocar en un objeto, y el método de serialización puede devolver una representación de cadena del objeto. Sin embargo, la serialización solo guarda los datos de los miembros del objeto y no los métodos.
En PHP4, si serializa el objeto en la cadena $s, luego libera el objeto y luego deserializa el objeto en $obj, ¡puede continuar usando los métodos del objeto! No recomiendo hacer esto porque (a) no hay garantía en la documentación de que este comportamiento seguirá funcionando en versiones futuras. (b) Esto puede provocar un malentendido al guardar una versión serializada en el disco y salir del script. Cuando ejecute este script más adelante, no puede esperar que cuando deserialice un objeto, los métodos del objeto estén allí, porque la representación de cadena no incluye ningún método.
Con todo, la serialización en PHP es muy útil para guardar variables miembro de un objeto. (También puede serializar matrices relacionadas y matrices en un archivo).
Ejemplo:
<?php
$obj=new Classfoo();
$str=serialize($obj);
//Guardar $str en el disco
//Unos meses después
//Cargar str desde el disco
$obj2=unserialize($cadena)
Restauraste los datos del miembro, pero no los métodos (según la documentación). Esto da como resultado la única manera de acceder a las variables miembro (¡no tienes otra manera!) mediante algo como usar $obj2->x, así que no lo intentes en casa.
Hay algunas formas de resolver este problema; las omito porque son una lástima para este breve artículo. Con mucho gusto agradecería funciones completamente serializadas en versiones posteriores de PHP.
Uso de clases para almacenamiento de datos Una de las mejores cosas de PHP y OOP es que puedes definir fácilmente una clase para que haga algo y llamar a la clase correspondiente cuando quieras usarla. Suponga que tiene un formulario HTML que permite al usuario seleccionar un producto seleccionando el número de identificación del producto. Hay información del producto en la base de datos y desea mostrar el producto, su precio, etc. Tienes diferentes tipos de productos y la misma acción puede significar diferentes cosas para diferentes productos. Por ejemplo, mostrar un sonido puede significar reproducirlo, pero para otros tipos de productos puede significar mostrar una imagen almacenada en una base de datos. Puede utilizar programación orientada a objetos o PHP para reducir la codificación y mejorar la calidad.
Defina una clase de producto, defina los métodos que debe tener (por ejemplo: visualización) y luego defina una clase para cada tipo de producto, derivada de la clase de producto (clase SoundItem, clase ViewableItem, etc.), que cubra los métodos de los productos en clases para que se comporten como tú quieres.
Nombra la clase de acuerdo con el campo de tipo de cada producto en la base de datos. Una tabla de producto típica puede tener (campos de identificación, tipo, precio, descripción, etc.)... Luego, en el script de procesamiento, puedes recuperarlo de la base de datos. Obtenga el valor del tipo y luego cree una instancia de un objeto llamado tipo:
<?php
$obj=new $type()
$obj->action();
Esta es una característica muy buena de PHP. Puede llamar al método de visualización u otros métodos de $obj sin considerar el tipo de objeto. Con esta técnica, no es necesario modificar el script para agregar un nuevo tipo de objeto, solo una clase para manejarlo.
Esta función es muy poderosa. Simplemente defina métodos sin considerar los tipos de todos los objetos, impleméntelos en diferentes clases en diferentes métodos y luego úselos en el script principal para cualquier objeto, no si... de lo contrario, no. Requiere dos programadores. sólo feliz.
¿Ahora está de acuerdo en que la programación es fácil, el mantenimiento es económico y la reutilización es cierta?
Si gestionas un grupo de programadores, asignar trabajo es sencillo; cada persona puede ser responsable de un tipo de objeto y la clase que lo maneja.
La internacionalización se puede lograr a través de esta tecnología, basta con aplicar la clase correspondiente según el campo de idioma seleccionado por el usuario, y así sucesivamente.
Copiar y clonar
Cuando crea un objeto de $obj, puede copiar el objeto mediante $obj2=$obj. El nuevo objeto es una copia (no una referencia) de $obj, por lo que tiene el estado de $obj en ese momento. . A veces, no quieres hacer esto. Solo quieres generar un nuevo objeto como la clase obj. Puedes llamar al constructor de la clase usando la nueva declaración. Esto también se puede lograr en PHP mediante la serialización y una clase base, pero todas las demás clases deben derivarse de la clase base.
Entrando a la zona de peligro
Cuando serializas un objeto, obtienes una cadena en algún formato, que puedes interrogar si estás interesado, donde, en la cadena, está el nombre de la clase (¡genial!) y puedes ponerlo. se elimina como:
<?php
$herring=serialize($obj);
$vec=explode(':',
$herring=str_replace(""",'',$vec[2]);
Entonces, suponiendo que crea una clase "Universo" y fuerza a todas las clases a extenderse desde el universo, puede definir un método de clonación en el universo, de la siguiente manera:
<?php
function clone() {
$herring=serialize($
this);
explotar(':',$arenque);
$nam=str_replace(""",'',$vec[2]);
$ret=nuevo $nam;
return $ret;
}
}
/ /Entonces
$obj=nuevo Algo();
//Expandir desde el Universo
$other=$obj->clone();
Lo que obtienes es un nuevo objeto de clase Something, que es el mismo que el objeto creado usando el nuevo método y llamando al constructor. No sé si esto funcionará para usted, pero es una buena regla general que la clase del universo conozca el nombre de la clase derivada. La imaginación es el único límite.
Esta declaración escribe la hora actual.