• 草稿1


    问题1:

    php的底层是c写的。c是强类型语言,而php是弱类型语言。php是如何实现的呢?

    答:

    php的一个变量,在c中是一个结构体,这个结构体叫做zval。(记住这个结构体的名字。)

    这个结构体由四个部分组成。

    zvalue_uchar type:变量的类型。

    在zend引擎解析php源码的时候,当发生赋值操作时,会给这个值一个zval结构体。其中type为其类型,zend引擎会根据一定规则判断值的类型,放入以下常量之一:

    IS_NULL, IS_BOOL,IS_LONG,IS_DOUBLE

    IS_STRING,IS_ARRAY,IS_OBJECT

    IS_RESOURCE

    然后根绝type的类型,在zval结构体中,找到zvalue_value 联合体中的对应类型,找到对应的c变量存储之。

    问题2:

    zval中的类型type有8个,而 value联合体中的值只有5种,why?

    答案:

    IS_LONG,IS_DOUBLE

    IS_STRING,IS_ARRAY,IS_OBJECT

    分别对应value种的五种类型。

    对于

    IS_NULL, IS_BOOL,IS_RESOURCE

    null类型不用存储值,type为IS_NULL即可判定。

    bool类型,type为long,值1为true,值0为false,

    资源类型,type为long,值value里的dval为资源标号。

    总结:

    php里的变量是通过c语言种的结构体存储。

    类型会通过zend引擎根据一定规则监测,自动判断,并设置其type和value。

    问题3:有人说,php种的全局变量存储在全局区,局部变量存储在局部区,这个说法正确吗?

    错:大错特错。

    对于php种的变量来说,其无论是全局变量还是局部变量,创建都包括三个步骤。

    1  创建zval结构体,设置type。

    2 根据type设置value联合体种的值。

    符号表里加入变量名,指向这个zval。

    问题4:

    符号表是什么?

    有一个全局符号表,一个局部符号表。

    zvalue_value  

    问题2:

  • 相关阅读:
    【Selenium-WebDriver问题点】chromeDriver和chrome浏览器版本之间的兼容性问题
    【Linux】【Jmeter】配置Jmeter服务器和运行Jmeter
    【Linux】【JDK】常用命令使用集和裸机配置JDK步骤。
    【Linux】使用ZStack私有云创建本地Linux服务器
    js基本数据类型和typeof
    Javascript 面向对象编程
    css3作3D旋转视频展示
    css3中的border-radius
    css3中做3D导航栏
    css3动画学习笔记
  • 原文地址:https://www.cnblogs.com/phper007/p/3100378.html
Copyright © 2020-2023  润新知