La programmation orientée objet est conçue pour fournir des solutions aux grands projets logiciels, en particulier aux projets impliquant plusieurs personnes. Lorsque le code source atteint 10 000 lignes ou plus, chaque modification peut provoquer des effets secondaires indésirables. Cela se produit lorsque les modules forment des alliances secrètes, comme dans. L'Europe avant la Première Guerre mondiale.
//haohappy Remarque : Cela signifie que la corrélation entre les modules est trop élevée et que l'interdépendance est trop forte. La modification d'un module entraînera également la modification des autres modules en conséquence.
Imaginez si un module qui gère les connexions permet à un module de traitement de carte de crédit de partager sa connexion à la base de données. Bien sûr, l'intention est bonne, ce qui permet d'économiser les frais liés à une autre connexion à la base de données. Cependant, parfois, le module de traitement des connexions modifie l'une des connexions à la base de données. Le nom de la variable peut rompre l'accord entre les deux, provoquant une erreur dans le traitement du module de carte de crédit, ce qui entraîne à son tour une erreur dans le module qui traite les factures. Bientôt, tous les modules non pertinents du système peuvent commettre des erreurs. à cause de cela
, je me sens un peu dramatique, la plupart des programmeurs sont reconnaissants pour le couplage et l'encapsulation. Le couplage est une mesure du degré de dépendance entre deux modules. Moins nous voulons pouvoir retirer un module. d'un projet existant et l'utiliser dans un autre Utilisé dans un nouveau projet.
Nous espérons également apporter des modifications à grande échelle au sein d'un certain module sans nous soucier de l'impact sur d'autres modules. Le principe d'encapsulation peut fournir cette solution. relativement indépendants et la communication de données entre les modules Faites-le via des interfaces. Les modules ne fouinent pas dans les noms de variables des autres, ils envoient poliment des requêtes via des fonctions.
L'encapsulation est un principe que vous pouvez utiliser dans n'importe quel langage de programmation en PHP et dans de nombreux langages procéduraux. langages Il est tentant d'être paresseux. Rien ne vous empêche de construire un hypothétique WEB à travers des modules. La programmation orientée objet est un moyen pour les programmeurs de ne pas violer le principe d'encapsulation.
Dans la programmation orientée objet, les modules sont organisés en objets. avoir des méthodes et des propriétés. D'un point de vue abstrait, les méthodes sont les actions d'un objet et les propriétés sont les caractéristiques de l'objet. D'un point de vue de la programmation, les méthodes sont des fonctions et les propriétés sont des variables. Système orienté, chaque partie est un objet. Le système est constitué d'objets et de relations entre les objets via des méthodes.
Une classe définit les propriétés de l'objet. Si vous créez un ensemble d'objets cookies, alors la classe sera une machine à cookies. Les propriétés et les méthodes de la classe sont appelées membres. On peut exprimer cela en disant membres de données ou membres de méthode.
Chaque langage propose différentes manières d'accéder aux objets. PHP vient des concepts d'emprunt du C++, fournissant un type de données pour contenir des fonctions et des variables. identifiant. Lorsque PHP a été conçu à l'origine, et même lorsque PHP3 a été développé, PHP n'était pas destiné à offrir la possibilité de développer des projets à grande échelle dépassant 100 000 lignes de code. Avec le développement du moteur PHP et Zend, il est devenu possible de développer de grands projets, mais quelle que soit la taille de votre projet, écrire vos scripts en classes permettra la réutilisation du code. C'est une bonne idée, surtout si vous souhaitez partager votre code avec d'autres.
L'idée d'objets est l'un des concepts les plus passionnants de l'informatique. Il est difficile de le maîtriser au début, mais je peux vous garantir qu'une fois que vous le maîtriserez, penser avec son esprit vous semblera très naturel.
Le modèle objet de PHP5
PHP5 a un héritage unique, un accès restreint et un modèle objet surchargeable. "L'héritage", qui sera discuté en détail plus loin dans ce chapitre, inclut les relations parent-enfant entre les classes. De plus, PHP prend en charge les attributs et l'accès restreint à. méthodes.Vous pouvez déclarer les membres comme privés, interdisant l'accès aux classes extérieures. Enfin, PHP permet à une sous-classe de surcharger les membres de sa classe parent.
Le modèle objet de PHP5 traite les objets différemment de tout autre type de données, passé par référence. pour transmettre et renvoyer explicitement des objets par référence. Le modèle objet basé sur les références sera expliqué en détail à la fin de ce chapitre. Il s'agit de la nouveauté la plus importante de PHP5.
Il est plus direct. Le modèle objet présente des avantages supplémentaires : une efficacité accrue. , moins d'utilisation de la mémoire et une plus grande flexibilité.
Dans les versions précédentes de PHP, les scripts copiaient les objets par défaut. Désormais, PHP5 déplace uniquement les poignées, ce qui nécessite moins de temps. apporte de la complexité, cela apporte également des avantages en termes d'efficacité d'exécution. Dans le même temps, réduire la copie signifie que moins de mémoire est occupée, qui peut être réservée. Cela libère plus de mémoire pour d'autres opérations, ce qui améliore également l'efficacité
de Zand Engine 2. Un développement heureux consiste à permettre l'exécution d'une méthode de classe avant que l'objet ne soit détruit. C'est également très utile pour utiliser la mémoire, permettant à PHP de savoir clairement quand il n'y a pas de référence à l'objet et d'allouer la mémoire libre. vers d'autres utilisations.
Le transfert d'objets
de gestion de mémoire de PHP5
PHP5 utilise Zend Engine II, et les objets sont stockés dans une structure distincte Object Store. Ils ne sont pas stockés dans Zval comme les autres variables générales (en PHP4, les objets sont stockés dans Zval comme les variables générales. ). Seul le pointeur de l'objet est stocké dans Zval plutôt que le contenu (valeur). Lorsque nous copions un objet ou transmettons un objet en tant que paramètre à une fonction, nous n'avons pas besoin de copier les données. Conservez simplement le même pointeur d'objet et informez le magasin d'objets que cet objet particulier pointe désormais via un autre zval. Étant donné que l'objet lui-même se trouve dans le magasin d'objets, toute modification que nous y apporterons affectera toutes les structures zval contenant des pointeurs vers l'objet - se manifestant dans le programme car toute modification apportée à l'objet cible affectera l'objet source. .Cela donne l'impression que les objets PHP sont toujours passés par référence, donc les objets en PHP sont passés par "référence" par défaut et vous n'avez plus besoin d'utiliser & pour les déclarer comme en PHP4.
Les mécanismes de récupération de place
dans certains langages, généralement le C, nécessitent que vous demandiez explicitement une allocation de mémoire lorsque vous créez une structure de données. Une fois que vous avez alloué de la mémoire, vous pouvez stocker des informations dans des variables. Dans le même temps, vous devez également libérer de la mémoire lorsque vous avez fini d'utiliser la variable, afin que la machine puisse libérer de la mémoire pour d'autres variables et éviter de manquer de mémoire.
PHP peut gérer automatiquement la mémoire et effacer les objets qui ne sont plus nécessaires. PHP utilise un mécanisme simple de récupération de place appelé comptage de références. Chaque objet contient un compteur de références, et chaque référence connectée à l'objet augmente le compteur de un. Lorsque la référence quitte l'espace de vie ou est définie sur NULL, le compteur est décrémenté de 1. Lorsque le compteur de références d'un objet atteint zéro, PHP sait que vous n'avez plus besoin d'utiliser l'objet et libère l'espace mémoire qu'il occupe.
Par exemple :
<?php
personne de classe{}
function sendEmailTo(){}
$haohappy = new Person( );
// Crée un nouvel objet : Nombre de références Nombre de références = 1
$haohappy2 = $haohappy ;
// Copie par référence : Nombre de références = 2
unset($haohappy);
// Supprime une référence : Nombre de références = 1
sendEmailTo($haohappy2);
// Passe l'objet par référence :
// Pendant l'exécution de la fonction :
// Nombre de références = 2
//Après exécution :
// Nombre de références = 1
non défini($haohappy2);
// Supprimer la référence : Nombre de références = 0 Libérer automatiquement de l'espace mémoire
?>