Explication détaillée de la différence entre php die() et exit()

墨辰丷
Libérer: 2023-03-28 12:10:02
original
1987 Les gens l'ont consulté

Quelle est la vraie différence entre die() et exit() en php ? Nous avons trouvé sur Baidu que die quitte et libère de la mémoire, exit quitte mais ne libère pas de mémoire. Est-ce vraiment le cas Les amis qui en ont besoin peuvent le faire ? référence,

Recherchez en ligne la différence entre les fonctions die et exit. La plupart des "réponses standard" disent que die sort et libère de la mémoire, et exit sort mais ne libère pas de mémoire.

Cette explication est évidemment fausse. Le manuel PHP a déjà dit "die — Equivalent à exit(). Cette construction de langage est équivalente à exit()." Les deux ne sont que des alias. complètement différent.

Cependant, j'étais toujours curieux et j'ai décidé de chercher des indices dans le code source pour voir comment PHP gère cet "alias".

Tout d'abord, il doit être clair que die et exit sont tous deux des « constructions de langage » et non des fonctions. Il y a aussi de nombreuses personnes sur Internet qui disent qu'un tel a une valeur de retour et qu'il l'est. une fonction, et tel ou tel a une valeur de retour et est une structure. De nombreux débutants le savent toujours. Si vous ne connaissez pas la différence entre la structure et la fonction du langage, en termes simples, la structure du langage peut être comprise comme un symbole de grammaire. lui-même. Des choses comme +, -, *, / sont également des structures de langage, if, else, for, while, ce sont toutes des structures de langage. fait partie de la grammaire elle-même. N'importe quelle langue aura ces éléments, car lorsque l'ordinateur verra +, il ne pensera pas qu'il doit être ajouté. Cela nécessite un compilateur pour le convertir en code machine, qui est un jeu d'instructions que le processeur peut reconnaître.

L'ensemble du processus lorsque PHP exécute le code source consiste d'abord à convertir les structures de langage telles que echo et if dans le code source en jetons tels que T_ECHO et T_IF tels que définis dans zend_lingual_scanner.l, et le code source sera espaces supprimés, commentez ces caractères qui n'ont rien à voir avec la logique du programme. , quelques expressions courtes sont formées, ce qui constitue l'étape d'analyse lexicale. Ces jetons seront ensuite convertis en codes op comme défini dans zend_vm_opcodes.h. Exécutez ensuite ces codes opérationnels un par un.

Ce qui précède explique grossièrement le processus de compilation et d'exécution de PHP, ainsi que la définition de la structure du langage. Venons-en au fait.

Nous devons également rappeler qu'il existe de nombreuses fonctions d'alias en PHP, telles que imploser et rejoindre. Qu'il s'agisse d'une fonction d'alias ou d'une structure de langage d'alias, du point de vue de l'effet réel, ce sont les mêmes, mais la méthode de traitement du code source est définitivement différente.

Regardons d'abord comment cette structure de langage d'alias est gérée, puis examinons la fonction d'alias plus tard.

zend_lingual_parser.c définit une macro

#define T_EXIT 300
Copier après la connexion

définit également une énumération, qui contient également

enum yytokentype {
…
T_EXIT = 300,
….
}
Copier après la connexion

Ici, on nous dit que le token T_EXIT a un code de 300.

Regardez zend_lingual_scanner.l, qui contient ces lignes de code.

<ST_IN_SCRIPTING>”exit” {
return T_EXIT;
}
<ST_IN_SCRIPTING>”die” {
return T_EXIT;
}
Copier après la connexion

Évidemment, lorsque php effectue une analyse lexicale, qu'il rencontre exit ou meure, il renverra le jeton T_EXIT. À partir de là, nous pouvons prouver que mourir et quitter, ainsi que le traitement interne de PHP sont exactement les mêmes.

Vous pouvez également utiliser le code php suivant pour déterminer :

<?php
var_dump(token_get_all(“<?php die;exit;?>”));
Copier après la connexion

Le code token correspondant pour mourir et sortir dans le résultat renvoyé, les deux valent 300.

Maintenant, en ce qui concerne la question de la mort et de la sortie, je pense que tout le monde devrait pouvoir confirmer que les noms sont simplement différents, mais l'effet est le même. Il n'y a pas de soi-disant problème de déchargement ou de déchargement. ne décharge pas la mémoire.

Manuel PHP : die()Équivalent à exit().

Explication : die() et exit() sont toutes deux des fonctions pour terminer l'exécution du script ; en fait, les deux noms exit et die pointent vers la même fonction, et die() est un alias de la fonction exit(). Cette fonction n'accepte qu'un seul paramètre, qui peut être une valeur renvoyée par un programme ou une chaîne, ou aucun paramètre ne peut être saisi, et le résultat n'est aucune valeur de retour.

Référence : Bien que les deux soient identiques, il existe une subtile sélectivité dans leur utilisation habituelle. Par exemple :
Lorsque la valeur passée aux fonctions exit et die est 0, cela signifie que l'exécution du script est terminée plus tôt, généralement en utilisant le nom exit().

echo "1111";
exit(0);
echo "2222";
//22222不会被输出,因为程序运行到exit(0)时,脚本已经被提前终止,“马上断气”。
Copier après la connexion

En cas d'erreur du programme, vous pouvez lui transmettre une chaîne, qui sera affichée telle quelle sur le terminal système, généralement en utilisant le nom die () .

$fp=fopen("./readme.txt","r") or die("不能打开该文件");
Copier après la connexion

Dans ce cas, si la fonction fopen est appelée et renvoie la valeur booléenne false, die() terminera immédiatement le script et l'imprimera sur Sa chaîne, "Vous pouvez dire un mot ou deux avant de mourir."

Ce qui précède représente l’intégralité du contenu de cet article, j’espère qu’il sera utile à l’étude de chacun.


Recommandations associées :

PHP+Analyse MySQL de la méthode d'implémentation de la file d'attente de messages

Comment envelopper la variable php dans la zone de texte du HTML front-end et comment obtenir la modification de nouvelle ligne dans le PHPbackend

Explication détaillée de la procédure stockée mysql Et PHP appelle l'instance de procédure stockée MYSQL

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal