上海龙凤419

php说话

PHP函数die()与exit()的真正区分

时候:2024-09-24 14:23:25 php说话 我要投稿
  • 相干保举

PHP函数die()与exit()的真正区分

  网上搜刮die与exit两个函数的区分,大局部的”规范谜底”都是说die是加入并开释内存,exit是加入但不开释内存。

  另有人说exit()并不必然便能够或许够让法式竣事,由于能够或许利用由于能够或许利用register_shutdown_function注册一个或多个exit以后才履行的函数,并且另有工具的析构函数也会在exit以后履行。可是die()必然能竣事法式。

  这个题目PHP官方给的谜底是两个函数感化同等。

  “die — Equivalent to exit().This language construct is equivalent to exit(). ”二者只是又名干系,除此以外完整一样。

  不过我仍是很好奇,决议从源码中找找线索,看看php是若何处置的这个“又名”。

  起首要清晰一点,die和exit都是”language construct”而非函数,网上也有良多说某某某有前往值是函数,某某无前往值是布局,良多初学者总搞不清说话布局和函数的区分,用浅显点的话讲,说话布局能够或许懂得为语法自身的一种标识。像+、-、*、/这些也都是说话布局,if、else、for、while,这些都是说话布局。是语法自身的一局部。任何说话城市有这些工具,由于计较机看到+不会以为是应当做加法的。这须要编译器转换为机械码也便是cpu能够或许辨认的指令集。

  php履行源码时的全部进程为,起首根据zend_language_scanner.l中界说的,将源码中的echo、if之类的说话布局转换成近似的T_ECHO、T_IF这些token,并且会去掉源码中的空格,正文这些与法式逻辑有关的字符。,就构成了一些冗长的抒发式,这便是词法阐发阶段。而后会根据zend_vm_opcodes.h中界说的,将这些token转换为op code。而后一条一行的履行这些op code。

  上面大要诠释了php的编译和履行的进程,和说话布局的界说。上面进入正题。

  咱们也应当记得,php中有良多又名函数,比方:implode和join。不管是又名函数仍是又名说话布局,从现实成果角度讲,都是一样的,不过源码的处置体例必定仍是不一样的。

  咱们先看看这个又名说话布局是若何处置的,稍后再看又名函数。

  zend_language_parser.c中,界说了一个宏

  #define T_EXIT 300

  还界说了一个enum,外面也有

  enum yytokentype {

  …

  T_EXIT = 300,

  ….

  }

  这里告知咱们,T_EXIT这个token,它的code是300。

  再看zend_language_scanner.l,此中有这么几行代码。

  ”exit” {

  return T_EXIT;

  }

  ”die” {

  return T_EXIT;

  }

  很较着,php做词法阐发时,不管碰到exit仍是die,城市前往T_EXIT这个token。从这里便能够或许够证实,die和exit,再php外部处置是完整一样的。

  也能够或许用以下php代码来肯定:

  ”));

  前往的成果中die和exit对应的token code,都是300。

  此刻对于die和exit的题目,我想大师应当能够或许肯定了,只是名字差别,成果都是一样的,不所谓的卸不卸载内存的题目。

【PHP函数die()与exit()的真正区分】相干文章:

PHP函数的区分及用法10-27

对于Linux体系号令中exit与exit的区分09-19

php经常使用的体系函数05-05

PHP类与机关函数07-01

PHP数组函数常识10-24

PHP函数常识总结09-29

PHP数据过滤函数09-05

PHP中php://input和$-POST的区分08-26

Java和PHP的区分09-09

php若何禁用eval函数06-12