zoukankan      html  css  js  c++  java
  • 草稿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:

  • 相关阅读:
    Effective.Java第67-77条(异常相关)
    淘宝店的图片哪里来的
    SEO高手在扯蛋?
    多少人,没能熬过那最初的三厘米!
    网站要提高权重要总结三点
    真正的干货是什么?
    google打不开怎么办?谷歌打不开的解决方法
    StatCounter
    教你如何抢注一个快过期的域名
    正确识别希捷Backup Plus新睿品1TB正品,杜绝奸商猖獗
  • 原文地址:https://www.cnblogs.com/phper007/p/3100378.html
Copyright © 2011-2022 走看看