¡Altas calificaciones para el sistema PHP orientado a objetos!
La programación orientada a objetos de PHP es un método comúnmente utilizado en el desarrollo de proyectos. En esta sección, presentaremos cómo realizar programación orientada a objetos (POO, Programación Orientada a Objetos) en PHP y explicaremos cómo reducir la codificación y mejorar la calidad mediante el uso de algunos conceptos de POO y técnicas de PHP. Antes de aplicar las clases de PHP, consulte los libros de programación orientados a objetos relevantes para comprender los conocimientos básicos de las clases y orientadas a objetos.
¿Cómo crear una clase y un objeto de instancia de la clase?
La encapsulación se completa a través de clases en PHP. Veamos primero un ejemplo simple:
. php //Definir clase
class ClassName {
//Utilice "var" para definir los miembros de datos. Los miembros de datos pueden ser un número entero, una matriz, una matriz asociativa o Is. un objeto
var $value;
// Los métodos se definen como funciones en la clase Al acceder a las variables miembro de la clase en el método, puede usar $this->name. ejemplo $this->setValue
function setValue($v) {
$this->value=$v
}
función getValue() {
return $this->value
}
}
//Crea un objeto con " nuevo" operador
$obj=new ClassName;
$obj->setValue("¡Hola, mundo PHP!");
$obj-> getValue ();
?>
Heredar usando la palabra clave "extender". Por ejemplo:
class HelloPHPWorld extiende ClassName {
var $message
function setMessage($msg) {
$this->mensaje=$msg;
}
function getMessage() {
return $this->mensaje;
}
}
?>
El objeto de la clase "HelloPHPWorld" ahora tiene todos los miembros de datos de la clase principal ( ClassName) y métodos, además de sus propios miembros y métodos de datos.
Podemos usar:
$obj2=new HelloPHPWorld
$obj2->setValue("¡Amo el mundo!"); p> $obj2->setMessage("¡Me encanta PHP!");
PHP aún no admite herencia múltiple, por lo que no se pueden derivar nuevas clases a partir de dos o más clases.
¿Cómo redefinir un método en una clase derivada?
Podemos redefinir un método en una clase derivada. Si redefinimos el método getValue en la clase "HelloPHPWorld", no podemos usar el método getValue en "ClassName".
Si declaramos un miembro de datos en una clase derivada con el mismo nombre que la clase base, cuando lo procesemos, "ocultará" el miembro de datos de la clase base.
¿Cómo definir un constructor en una clase?
El constructor es un método con el mismo nombre que el nombre de la clase. Cuando se crea un objeto de una clase, se llamará a esta función para inicializar el objeto, como por ejemplo definir una clase:
< ?php
class NombreDeClase {
var $valor
function NombreDeClase($v) {
$this; ->valor= $v;
}
función setValue($v) {
$this->valor=$v; p> }
function getValue() {
return $this->value
}
}
<; p> ?>En el ejemplo anterior, la función miembro ClassName en la clase es un constructor. Ahora podemos crear objetos como este:
$obj=new ClassName("Hola. , PHP world!") ;
Pase los parámetros al constructor, y el constructor asignará automáticamente "¡Hola, PHP world!" al valor de la variable de datos en la función. Los constructores y métodos son funciones PHP ordinarias, por lo que se pueden utilizar parámetros predeterminados.
function ClassName($k="bienvenido",$v="¡Hola, mundo PHP!")
Siguiente:
$obj=new ClassName( ); // $key="bienvenido",value="¡Hola, mundo PHP!"
$obj=new ClassName("¡Me encanta PHP!"); // $key="bienvenido", value="¡Me encanta PHP!"
$obj=new ClassName("Primero","¡Me encanta PHP!"); // $key="Primero",value="¡Me encanta PHP!"
Los parámetros predeterminados utilizan el método C++. Los parámetros se asignan de izquierda a derecha. Si los parámetros pasados son menores que los parámetros requeridos, se utilizarán los parámetros predeterminados para el resto.
Cuando se crea un objeto de una clase derivada, solo se llama a su constructor, y no se llama al constructor de la clase padre. Si quieres llamar al constructor de la clase base, debes hacerlo. en la clase derivada. Llamado explícitamente en el constructor. Esto se puede hacer porque todos los métodos de la clase principal están disponibles en la clase derivada.
<?php
function HolaPHPWorld() {
$this->message="¡Hola, mundo PHP!"; $this->ClassName();
//Llamar explícitamente al constructor de la clase base
}
?>
En PHP hay No existe una forma estándar de implementar una clase abstracta en Agregue una declaración "die" después de cada método (interfaz), por lo que si un programador no anula el método en una clase derivada, se generará un error. Y debido a que PHP no tiene tipo, es posible que deba confirmar que un objeto es una clase derivada de la clase base, luego agregar un método a la clase base para definir la identidad de la clase (devolver algún tipo de identificación de identificación) y después de recibir an Compruebe este valor cuando utilice parámetros de objeto.
¿Cómo implementar la función destructora en PHP?
En POO podemos sobrecargar un método para implementar dos o más métodos con el mismo nombre, pero con diferentes números o tipos de parámetros (según el idioma). PHP es un lenguaje de tipo flexible y no tiene destructor, por lo que la sobrecarga por tipo o por diferentes números de parámetros no tiene ningún efecto.
A veces es bueno sobrecargar los constructores en programación orientada a objetos para que los objetos puedan crearse de diferentes maneras (pasando diferentes números de argumentos).
En PHP, ¿cómo lograr la misma función? La técnica es la siguiente:
<?php
class Miclase {
función Miclase() {
$name="Miclase ".func_num_args ();
$this->$name();
//Tenga en cuenta que $this->name() generalmente es incorrecto, pero aquí $name es un valor que será El nombre del método de llamada
}
function Myclass1($x) {
……
}
función Miclase2($x,$y) {
……
}
}
?>
El uso de esta clase es transparente para el usuario a través de un procesamiento adicional en la clase:
$obj1=new Myclass('1'); //Se llamará Myclass1
$ obj2=new Myclass('1','2'); //Se llamará Myclass2
¿Cómo aplicar polimorfismo en PHP?
El polimorfismo es muy fácil y natural en un lenguaje interpretado como PHP:
<?php
function niceDrawing($x) {
p>
//Supongamos que este es un método de la clase Board
$x->draw()
}
$obj=; nuevo círculo (3,187);
$obj2=nuevo rectángulo(4,5);
$board->niceDrawing($obj); Se llamará método de dibujo de Círculo
$board->niceDrawing($obj2
//Se llamará método de dibujo de Rectángulo
?>
¿Cómo aplicar el mecanismo de serialización (Serializing)?
PHP no admite objetos persistentes. En OOP, 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 el objeto se puede cargar 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.
Ejemplo:
<?php
$obj=new Classfoo()
$str=serialize($obj);
//Guardar $str en el disco
//Unos meses después
//Cargar str desde el disco
$obj2= unserialize($str)
?>
Restaura los datos de los miembros, pero no incluye métodos. Esto da como resultado la única forma de acceder a las variables miembro similar al uso de $obj2->x.
¿Cómo utilizar clases para el almacenamiento de datos?
Con PHP y OOP, es fácil definir una clase para hacer algo y llamar a la clase correspondiente cuando quieras usarla. Podemos usar POO 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: display), y luego defina clases para cada tipo de producto, derivadas de la clase de producto (clase SoundItem, clase ViewableItem, etc.) , anula los métodos de la clase de producto para que funcionen como esperamos.
Nombra la clase según el campo de tipo de cada producto en la base de datos. Una tabla de producto típica puede tener campos como (id, tipo, precio, descripción) y luego, en el script de procesamiento, puedes hacerlo. recuperar el valor del tipo de la base de datos y crear una instancia de un objeto llamado tipo:
$obj=new $type()
$obj-; >action();
?>
Esta es una muy buena característica de PHP. No necesita considerar el tipo de objeto, llamando al método de visualización de $obj u otro. método. No es necesario modificar el script para agregar un nuevo tipo de objeto, solo una clase para manejarlo.
Al crear un objeto de $obj, puede copiar el objeto a través de $obj2=$obj. El nuevo objeto es una copia de $obj (no una referencia), por lo que tiene el valor de $obj. en ese momento. A veces, si solo desea generar un nuevo objeto como la clase obj, puede 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.
Al serializar un objeto, obtendrá una cadena en un formato determinado. La cadena contiene el nombre de la clase, que se puede extraer, por ejemplo:
$arenque=serialize($obj);
$vec=explode(':',$arenque
$nam=str_replace("\); "",'',$vec[2]);
?>
Entonces, supongamos que creas una clase "Universo" y obligas a todas las clases a extenderse desde el universo, puedes definirla. un método de clonación en el universo, de la siguiente manera:
class Universe {
function clone() {
$herring =serialize($this);
$vec=explode(':',$arenque
$nam=str_replace(""",'', $vec[2); ]);
$ret=nuevo $nam;
return $ret
}
}
p>
//Entonces
$obj=new Something();
//Extender desde el Universo
$other=$obj-> clone ();
?>
Lo que se obtiene es un nuevo objeto de clase Something, que es el mismo que el objeto creado usando el nuevo método y llamando al constructor.