


Quelle est la différence entre les mécanismes de garbage collection de PHP5 et PHP7 ?
Les mécanismes de récupération de place de php5 et php7 utilisent tous deux le comptage de références. Puisque PHP est écrit en C, il existe ce qu'on appelle une structure en C. Nos variables PHP sont stockées de cette manière en C. Aujourd'hui, nous allons apprendre la différence entre les mécanismes de garbage collection de PHP5 et PHP7.
Les mécanismes de garbage collection de php5 et php7 utilisent tous deux le comptage de références
Voyons d'abord ce qu'est le comptage de références :
Puisque PHP est écrit en C, il existe ce qu'on appelle une structure en C. Ceci C'est ainsi que nos variables PHP sont stockées en C. Chaque variable PHP existe dans un conteneur appelé zval. Un conteneur zval, en plus de contenir le nom et la valeur de la variable, comprend également deux octets d'informations supplémentaires, l'un s'appelle 'is_ref'. qui est une valeur booléenne utilisée pour indiquer si cette variable appartient à la collection de référence. Grâce à cet octet, nous pouvons distinguer les variables ordinaires des variables de référence en PHP. Le deuxième octet supplémentaire est 'refcount', utilisé pour représenter le nombre de variables pointant vers. ce conteneur
Nous définissons une variable en PHP
$name='看看';
Nous pouvons maintenant utiliser la fonction xdebug_debug_zval() pour obtenir des informations pertinentes sur les variables au sein de la fonction
xdebug_debug_zval('name'); //输出 name:(refcount=1,is_ref=0)='new String' 现在我们把$name赋值给$money $money = $name;
Regardons à nouveau :
xdebug_debug_zval('name'); //输出 name:(refcount=2,is_ref=0)='new String'
À ce stade, nous verra que la valeur du champ refcount a augmenté de 1, ce qui signifie que les deux variables existantes pointent vers le même conteneur aval nommé name
Selon les règles de comptage de références, lorsque ce refcount=0, PHP recyclera ce conteneur comme poubelle.
De même, nous exécutons
unset($name); //一样也会把name容器的引用计数设置为0
Les conclusions ci-dessus concernent uniquement les types scalaires. Jetons un coup d'œil au
array responsable du type :
$person=['name'=>'请欢','age'=>19]; var_dump(xdebug_debug_zval('person')); 在PHP5输出: person: (refcount=1, is_ref=0), array (size=2) 'name' => (refcount=1, is_ref=0),string '看看' (length=6) 'age' => (refcount=1, is_ref=0),int 19
Sortie en PHP7 :
person: (refcount=2, is_ref=0) array (size=2) 'name' => (refcount=1, is_ref=0)string '看看' (length=6) 'age' => (refcount=0, is_ref=0)int 19
Cela peut être vu. que pour les types de données complexes, les algorithmes de comptage de références de PHP5 et PHP7 sont différents
Essayons la situation des références circulaires
Basé sur le code ci-dessus, ajoutez une ligne de code
$person['hello'] = $person['name']
Sortie en PHP7 :
person: (refcount=1, is_ref=0) array (size=3) 'name' => (refcount=3, is_ref=0)string '看看' (length=6) 'age' => (refcount=0, is_ref=0)int 19 'hello' => (refcount=3, is_ref=0)string '看看' (length=6)
Sortie dans PHP5 :
person: (refcount=1, is_ref=0), array (size=3) 'name' => (refcount=2, is_ref=0),string '看看' (length=6) 'age' => (refcount=1, is_ref=0),int 19 'hello' => (refcount=2, is_ref=0),string '看看' (length=6)
Petit résumé :
Les mécanismes de récupération de place de PHP5 et PHP7 appartiennent tous deux au comptage de références, mais en termes de traitement algorithmique de types de données complexes :
Il existe une nouvelle implémentation de zval dans PHP7 Way. Le changement le plus fondamental est que la mémoire requise par *zval n'est plus allouée séparément du tas et que le décompte de références n'est plus stocké par lui-même. Le nombre de références des types de données complexes (tels que les chaînes, les tableaux et les objets) est stocké par lui-même. Cette implémentation présente les avantages suivants : *
* Les types de données simples n'ont pas besoin d'allouer de la mémoire séparément et n'ont pas besoin d'être comptés ; *
* Il n'y aura plus deux décomptes ; Dans un objet, seul le décompte stocké dans l'objet lui-même est valide ; *
*Puisque le décompte est désormais stocké par la valeur elle-même, il peut être partagé avec des données dans des structures non-zval, comme entre zval et la clé de table de hachage ; *
Apprentissage recommandé :
Tutoriel vidéo PHPCe 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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Les différences entre php5 et php8 concernent les performances, la structure du langage, le système de types, la gestion des erreurs, la programmation asynchrone, les fonctions de bibliothèque standard et la sécurité. Introduction détaillée : 1. Amélioration des performances. Par rapport à PHP5, PHP8 présente une énorme amélioration des performances. PHP8 introduit un compilateur JIT, qui peut compiler et optimiser certains codes d'exécution à haute fréquence, améliorant ainsi la vitesse d'exécution. PHP8 introduit de nouvelles structures et fonctions de langage. PHP8 prend en charge les paramètres nommés, permettant aux développeurs de transmettre les noms des paramètres au lieu de l'ordre des paramètres, etc.

Comment installer l'extension mongo dans php7.0 : 1. Créez le groupe d'utilisateurs et l'utilisateur mongodb ; 2. Téléchargez le package de code source mongodb et placez le package de code source dans le répertoire "/usr/local/src/" ; Entrez le répertoire « src/ » ; 4. Décompressez le package de code source ; 5. Créez le répertoire de fichiers mongodb ; 6. Copiez les fichiers dans le répertoire « mongodb/ » 7. Créez le fichier de configuration mongodb et modifiez la configuration.

En php5, nous pouvons utiliser la fonction fsockopen() pour détecter le port TCP. Cette fonction peut être utilisée pour ouvrir une connexion réseau et effectuer certaines communications réseau. Mais en php7, la fonction fsockopen() peut rencontrer certains problèmes, comme ne pas pouvoir ouvrir le port, ne pas pouvoir se connecter au serveur, etc. Afin de résoudre ce problème, nous pouvons utiliser la fonction socket_create() et la fonction socket_connect() pour détecter le port TCP.

Pour résoudre le problème du plugin n'affichant pas installé dans PHP 7.0 : Vérifiez la configuration du plugin et activez le plugin. Redémarrez PHP pour appliquer les modifications de configuration. Vérifiez les autorisations du fichier du plugin pour vous assurer qu'elles sont correctes. Installez les dépendances manquantes pour garantir le bon fonctionnement du plugin. Si toutes les autres étapes échouent, reconstruisez PHP. D'autres causes possibles incluent des versions de plugin incompatibles, le chargement d'une mauvaise version ou des problèmes de configuration PHP.

Comment changer le port 80 dans php5 : 1. Modifiez le numéro de port dans le fichier de configuration du serveur Apache ; 2. Modifiez le fichier de configuration PHP pour vous assurer que PHP fonctionne sur le nouveau port ; 3. Redémarrez le serveur Apache et l'application PHP le fera. commencez à exécuter sur le nouveau port.

Les solutions courantes pour les environnements de serveur PHP consistent à s'assurer que la version correcte de PHP est installée et que les fichiers pertinents ont été copiés dans le répertoire du module. Désactivez SELinux temporairement ou définitivement. Vérifiez et configurez PHP.ini pour vous assurer que les extensions nécessaires ont été ajoutées et configurées correctement. Démarrez ou redémarrez le service PHP-FPM. Vérifiez les paramètres DNS pour les problèmes de résolution.

Comment installer et déployer php7.0 : 1. Accédez au site officiel de PHP pour télécharger la version d'installation correspondant au système local ; 2. Extrayez le fichier zip téléchargé dans le répertoire spécifié 3. Ouvrez la fenêtre de ligne de commande et accédez à ; le répertoire "E:\php7" Exécutez simplement la commande "php -v".

Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système. Chaque fois que le système redémarre, nous devons exécuter la commande suivante pour modifier les autorisations d'UnixSocket: sudo ...
