Welcome to the website navigation,本站只接受合法正规的企业网站,欢迎站长们提交你的网站获得展示和流量有任何问题请联系站长,欢迎大家加入本站。

                
提交网站
  • 网站:76083
  • 待审:5
  • APP:577
  • 文章:304411
  • 会员:56004
文字内链包年1000元 文字内链包年1000元 文字内链包年1000元 AI办公网站 AI绘画工具 AIchat

名站导航为爱好php程序的朋友们提供php相关的教程知识。

PhP程序中的变量类型和值是通过C语言实现的,内核具体是如何组织用户在PhP程序中定义的变量呢?blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

hash Table在ZE内核中被广泛使用,PhP程序变量也正是存储在一个hashTable实现的符号表里。当在PhP程序中调用一个函数或者类时,内核会创建一个新的符号表,这也是为什么在函数中无法使用函数外部定义的变量的原因。因为他们分属两个符号表,一个当前作用域,一个全局作用域。blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

现在来看内核中是如何定义作用域的:blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

struct _zend_executor_globals {  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

    //略  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

    hashTable symbol_table;//全局变量的符号表  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

    hashTable *active_symbol_table;//局部变量的符号表  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

    //略  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

};  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

可以通过EG宏来访问变量符号表,EG(symbol_table)访问全局作用域的变量符号表,EG(active_symbol_table)访问当前作用域的变量符号表。blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

<?php  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

$foo='bar';  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

?> blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

上面这段具体代码如下很简单,创建变量foo,并赋值bar。之后的PhP程序具体代码如下中就可以调用$foo变量了。现在看看PhP程序中定义的变量,内核中是如何实现的。伪具体代码如下:blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

zval* foo;  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

MAKE_STD_ZVAL(foo);  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ZVAL_STRING(foo, "bar", 1);  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ZEND_SET_SYMBOL( EG(active_symbol_table), "foo", foo);  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

第一步:创建一个zval结构,并设置类型。blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

第二步:赋值为bar。blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

第三步:将其加入当前作用域符号表,只有这样用户才能在PhP程序里使用这个变量。blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

通过简单的这三步,即可实现定义PhP程序变量。简单的原因,在于内核为我们提供了强大的宏。现在我们将宏分别展开。blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

MAKE_STD_ZVAL应用到的宏有:blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

#define     MAKE_STD_ZVAL(zv)               ALLOC_ZVAL(zv);INIT_PZVAL(zv)  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

#define     ALLOC_ZVAL(z)                   ZEND_FAST_ALLOC(z, zval, ZVAL_CAChE_LIST)  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

#define     ZEND_FAST_ALLOC(p, type, fc_type)       (p) = (type *) emalloc(sizeof(type))  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

#define     INIT_PZVAL(z)                       (z)->refcount__gc = 1;(z)->is_ref__gc = 0;  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

MAKE_STD_ZVAL(foo)展开后得到:blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

(foo) = (zval *) emalloc(sizeof(zval));  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

(foo)->refcount__gc = 1;  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

(foo)->is_ref__gc = 0;blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

可以看出,MAKE_STD_ZVAL做了三件事:分配内存、初始化zval结构中的refcount、is_ref。blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ZVAL_STRING应用到的宏有:blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

#define ZVAL_STRING(z, s, duplicate) {  \  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

        const char *__s=(s);            \  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

        Z_STRLEN_P(z) = strlen(__s);    \  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

        Z_STRVAL_P(z) = (duplicate?estrndup(__s, Z_STRLEN_P(z)):(char*)__s);\  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

        Z_TYPE_P(z) = IS_STRING;        \  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

    }  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

#define Z_STRLEN_P(zval_p)      Z_STRLEN(*zval_p)  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

#define Z_STRLEN(zval)          (zval).value.str.len  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

#define Z_STRVAL_P(zval_p)      Z_STRVAL(*zval_p)  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

#define Z_STRVAL(zval)          (zval).value.str.val  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

#define Z_TYPE_P(zval_p)            Z_TYPE(*zval_p)  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

#define Z_TYPE(zval)            (zval).type  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

#define IS_STRING               6  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

展开后得到:blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

const char *__s=("foo");  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

(foo).value.str.len=strlen(__s);  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

(foo).value.str.val=(duplicate?estrndup(__s, (zval).value.str.len):(char*)__s);  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

(foo).type=6;blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ZVAL_STRING做的工作是设置数据类型并赋值。blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ZEND_SET_SYMBOL这里只展开一部分宏,因为它展开后过于复杂。blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

# define EG(v) (executor_globals.v)blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

展开部分后得到:blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ZEND_SET_SYMBOL(executor_globals.active_symbol_table, "foo", foo);  blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

将变量名入当前作用域符号表。之所以使用内核提供的宏来分配内存、注册变量作用域,是因为这样能提高兼容性。blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

名站网址导航

PhP程序内核探索:变量的类型blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

如果你用过PhP程序,肯定体验过PhP程序的弱类型的变量体系。众所周知,PhP程序引擎是用C写的,而C确实一种强类型的编程语言,PhP程序内核中是如何用C来实现自己的这种弱类型特性的?下面谈谈变量的类型。blUAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

好了关于php程序的知识就说到这里希望可以帮助需要的朋友。,

标签:

分享到:

  admin

注册时间:

网站:0 个   APP:3 个  文章:0 篇

  • 76083

    网站

  • 577

    APP

  • 304411

    文章

  • 56004

    会员

赶快注册账号,推广您的网站吧!
文章分类
热门网站
最新入驻APP小程序

宝贝市场2023-02-08

宝贝市场——买手和卖家商品展示

夺宝助手2023-02-08

夺宝助手小程序,查看每日快夺宝平

查诚信2023-02-08

查诚信是一款免费的商业查询工具

车价天天报2023-02-08

快速连接汽车销售,获知汽车最新报

考勤助理小程序2023-02-08

上班签到考勤,实时定位,后台轻松

汽车报价大全查询2023-02-08

汽车报价大全查询提供最新汽车市