Maison > Article > développement back-end > Comment php fait-il référence au modèle objet ? Explication détaillée des exemples spécifiques cités
PHP a un modèle d'objet à héritage unique et à accès restreint qui peut surcharger De plus, PHP prend en charge les restrictions sur les attributs et 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 PHP traite les objets de la même manière que tout autre Type de données . différent et est passé par référence. PHP ne vous oblige pas à passer et à renvoyer explicitement des objets par référence. Le modèle objet basé sur la référence sera expliqué en détail à la fin de ce chapitre. C'est la nouvelle fonctionnalité la plus avancée de PHP5.
Avec un modèle objet plus direct, il y a des avantages supplémentaires : une efficacité accrue, moins d'utilisation de la mémoire et une plus grande flexibilité
En PHP Dans les versions précédentes, le script copiait l'objet par défaut. PHP ne fait que déplacer la poignée, ce qui prend moins de temps. L'amélioration de l'efficacité d'exécution du script est due à l'évitement des copies inutiles. Bien que le système d'objets apporte de la complexité, il apporte également des gains d'efficacité d'exécution. En même temps, réduire la copie signifie occuper. moins de mémoire et laissant plus de mémoire pour d'autres opérations, ce qui améliore également l'efficacité
Zand Engine 2 a une plus grande flexibilité . Un développement heureux est de permettre la destruction - exécuter une méthode de classe avant que l'objet ne soit détruit. pour l'utilisation de la mémoire, permettant à PHP de savoir clairement quand il n'y a aucune référence à l'objet et d'allouer la mémoire libérée à d'autres utilisations
Supplément :
Gestion de la mémoire de PHP5
. Les objets passant
PHP5 utilise Zend Engine II, et les objets sont stockés dans des structures indépendantesObject Store, au lieu d'être stockés dans Zval comme les autres variables générales (en PHP4, les objets sont stockés dans Zval comme 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 laissez un autre zval informer le magasin d'objets vers lequel cet objet particulier pointe maintenant. É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 (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 le déclarer comme en PHP4.
Mécanisme de récupération de place
Certains langages, le plus généralement le C, exigent 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 le comptage de références, un mécanisme simple de garbage collection. 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 cet objet et libère l'espace mémoire qu'il occupe.
Par exemple :
Le code est le suivant :
<?php class Person{ } function sendEmailTo(){ } $haohappy = new Person( ); // 建立一个新对象: 引用计数 Reference count = 1 $haohappy2 = $haohappy; // 通过引用复制: Reference count = 2 unset($haohappy); // 删除一个引用: Reference count = 1 sendEmailTo($haohappy2); // 通过引用传递对象: // 在函数执行期间: // Reference count = 2 // 执行结束后: // Reference count = 1 unset($haohappy2); // 删除引用: Reference count = 0 自动释放内存空间 ?>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!