La programación orientada a objetos está diseñada para proporcionar soluciones para grandes proyectos de software, especialmente proyectos que involucran a varias personas. Cuando el código fuente crece a 10,000 líneas o más, cada cambio puede causar efectos secundarios indeseables. Esto sucede cuando los módulos forman alianzas secretas, como en. Europa antes de la Primera Guerra Mundial.
//haohappy Nota: Significa que la correlación entre módulos es demasiado alta y la interdependencia es demasiado fuerte. Cambiar un módulo hará que otros módulos también se cambien en consecuencia.
Imagínese si un módulo que maneja inicios de sesión permite que un módulo de procesamiento de tarjetas de crédito comparta su conexión a la base de datos. Por supuesto, la intención es buena, ahorrando el gasto de realizar otra conexión a la base de datos. Sin embargo, a veces, el módulo de procesamiento de inicios de sesión cambia una de las conexiones de la base de datos. El nombre de la variable puede romper el acuerdo entre los dos, provocando un error en el procesamiento del módulo de tarjeta de crédito, lo que a su vez conduce a un error en el módulo que procesa facturas. Pronto, todos los módulos irrelevantes del sistema pueden cometer errores. Debido a esto
, me siento un poco dramático, la mayoría de los programadores agradecen el acoplamiento y la encapsulación. El acoplamiento es una medida del grado de dependencia entre dos módulos. Cuanto menos acoplamiento, mejor. de un proyecto existente y usarlo en otro Utilizado en un nuevo proyecto
También esperamos realizar cambios a gran escala dentro de un determinado módulo sin preocuparnos por el impacto en otros módulos. El principio de encapsulación se puede considerar como módulos. relativamente independiente y la comunicación de datos entre módulos lo hace a través de interfaces. Los módulos no husmean en los nombres de las variables de los demás, envían solicitudes cortésmente a través de funciones.
La encapsulación es un principio que puede usar en cualquier lenguaje de programación en PHP y en muchos orientados a procedimientos. lenguajes Es tentador ser perezoso. No hay nada que le impida construir una WEB hipotética a través de módulos. La programación orientada a objetos es una forma para que los programadores no violen el principio de encapsulación
. Tiene métodos y propiedades. Desde un punto de vista abstracto, los métodos son las acciones de un objeto y las propiedades son las características del objeto. Desde el punto de vista de la programación, los métodos son funciones y las propiedades son variables. Sistema orientado, cada parte es un objeto. El sistema consta de objetos y las relaciones entre objetos a través de métodos.
Una clase define las propiedades del objeto. Si está horneando un conjunto de objetos de cookies, entonces la clase será una máquina de cookies. Las propiedades y métodos de la clase se llaman miembros. Se puede expresar esto diciendo miembros de datos o miembros de métodos.
Cada lenguaje proporciona diferentes formas de acceder a objetos. PHP proviene de conceptos prestados de C++, proporcionando un tipo de datos para contener funciones y variables. identificador. Cuando PHP se diseñó originalmente, e incluso cuando se desarrolló PHP3, PHP no estaba destinado a brindar la capacidad de desarrollar proyectos a gran escala que excedieran las 100.000 líneas de código. Con el desarrollo de PHP y el motor Zend, se ha hecho posible desarrollar proyectos grandes, pero no importa cuán grande sea su proyecto, escribir sus scripts en clases permitirá la reutilización del código. Esta es una buena idea, especialmente si está dispuesto a compartir su código con otras personas.
La idea de objetos es uno de los conceptos más apasionantes de la informática. Es difícil dominarlo al principio, pero puedo garantizar que una vez que lo domines, pensar con su mente te resultará muy natural.
Modelo de objetos de PHP5
PHP5 tiene una herencia única, acceso restringido y un modelo de objetos sobrecargable. "Herencia", que se discutirá en detalle más adelante en este capítulo, incluye relaciones padre-hijo entre clases. Además, PHP admite atributos y acceso restringido a. Puede declarar miembros como privados, no permitiendo el acceso desde clases externas. Finalmente, PHP permite que una subclase sobrecargue miembros de su clase principal.
El modelo de objetos de PHP5 trata los objetos de manera diferente a cualquier otro tipo de datos, PHP no lo requiere. para pasar y devolver objetos explícitamente por referencia. El modelo de objetos basado en referencias se explicará en detalle al final de este capítulo. Es la característica nueva más importante de PHP5.
Es más directo. El modelo de objetos tiene ventajas adicionales: mayor eficiencia. , menos uso de memoria y mayor flexibilidad.
En versiones anteriores de PHP, los scripts copiaban objetos de forma predeterminada. Ahora PHP5 solo mueve los identificadores, lo que requiere menos tiempo. La mejora en la eficiencia de ejecución de scripts se debe a que se evitan copias innecesarias del sistema. trae complejidad, también trae beneficios en la eficiencia de ejecución. Al mismo tiempo, reducir la copia significa que se ocupa menos memoria, que se puede reservar. Esto libera más memoria para otras operaciones, lo que también mejora la eficiencia
. Un buen desarrollo es permitir la ejecución de destrucción de un método de clase antes de que se destruya el objeto. Esto también es bueno para utilizar la memoria. Es muy beneficioso, ya que permite a PHP saber claramente cuándo no hay ninguna referencia al objeto y asignar la memoria libre. para otros usos.
Transferencia de objetos
de administración de memoria de PHP5
PHP5 usa Zend Engine II y los objetos se almacenan en una estructura separada Object Store. No se almacena en Zval como otras variables generales (en PHP4, los objetos se almacenan en Zval como variables generales). ). En Zval solo se almacena el puntero del objeto en lugar del contenido (valor). Cuando copiamos un objeto o pasamos un objeto como parámetro a una función, no necesitamos copiar los datos. Simplemente mantenga el mismo puntero de objeto y notifique al Almacén de objetos que este objeto en particular ahora apunta a través de otro zval. Dado que el objeto en sí está ubicado en el Almacén de objetos, cualquier cambio que le hagamos afectará a todas las estructuras zval que contienen punteros al objeto, lo que se manifiesta en el programa ya que cualquier cambio en el objeto de destino afectará al objeto de origen. Esto hace que los objetos PHP parezcan como si siempre se pasaran por referencia, por lo que los objetos en PHP se pasan por "referencia" de forma predeterminada y ya no es necesario utilizar & para declararlos como en PHP4.
Los mecanismos de recolección de basura
en algunos lenguajes, generalmente C, requieren que usted solicite explícitamente la asignación de memoria cuando crea una estructura de datos. Una vez que asigna memoria, puede almacenar información en variables. Al mismo tiempo, también debe liberar memoria cuando termine de usar la variable, para que la máquina pueda liberar memoria para otras variables y evitar quedarse sin memoria.
PHP puede administrar automáticamente la memoria y borrar objetos que ya no son necesarios. PHP utiliza un mecanismo simple de recolección de basura llamado recuento de referencias. Cada objeto contiene un contador de referencia y cada referencia conectada al objeto aumenta el contador en uno. Cuando la referencia sale del espacio habitable o se establece en NULL, el contador disminuye en 1. Cuando el contador de referencia de un objeto llega a cero, PHP sabe que ya no necesita usar el objeto y libera el espacio de memoria que ocupa.
Por ejemplo:
<?php
clase persona{}
función enviarEmailTo(){}
$haohappy = nueva Persona( );
// Crea un nuevo objeto: Recuento de referencias Recuento de referencias = 1
$haofeliz2 = $haofeliz;
// Copiar por referencia: recuento de referencias = 2
desarmado($haohappy);
// Eliminar una referencia: recuento de referencias = 1
enviar correo electrónico a($haohappy2);
// Pasar objeto por referencia:
// Durante la ejecución de la función:
// Recuento de referencias = 2
//Después de la ejecución:
// Recuento de referencias = 1
unset($haohappy2);
// Eliminar referencia: recuento de referencias = 0 ¿Liberar espacio de memoria automáticamente
?>