PHP原理变量的分析(PHP中的变量)
也许你知道,也许你不知道,PHP是一种弱的动态脚本语言,所谓的弱类型是PHP并没有严格地验证变量的类型(严格地说,PHP是一种中等强度的语言,在以后的文章中将有这样的描述)。在声明一个变量时,它不需要显示它保存的数据类型。复制代码代码如下所示:
< PHP
$ = 1;
$ var =laruence ; / /串
$ = 1.0002;
$ =(数组);
$ var =新的异常(错误的); / /对象;
动态语言,也就是说,PHP的语言结构可以在运行时改变。例如,我们运行一段需求,一个函数定义一个文件,从而导致语言函数表的动态变化。
所谓的脚本语言,即PHP不能独立运行,并且运行PHP,我们需要PHP解析器:
复制代码代码如下所示:
/ usr /斌/ PHP F example.ph
我以前的文章提到的,PHP的Zend引擎执行(泽,Zend,泽引擎)是用C编写的,我们都知道C是一个强类型的语言,也就是说,在所有的变量在声明它最后被摧毁,只能保存一个数据类型,那么PHP是实现对泽的基础薄弱的类型
在PHP中,所有的变量与结构变量保存,并在Zend /禅,我们可以看到变量的定义:
复制代码代码如下所示:
_zval_struct { typedef struct
zvalue_value价值;
zend_uint引用计数;
zend_uchar型;
zend_uchar is_ref;
zval };
zvalue_value是真正存储数据的关键部分。现在是解开谜团的时候了。PHP如何在泽的基础上实现弱类型因为zvalue_value是一个联盟(联盟),
复制代码代码如下所示:
_zvalue_value { typedef联盟
长的语句;
双dval;
struct {
字符*;
Int len;
STR };
哈希表* HT;
zend_object_value obj;
zvalue_value };
那么这个结构是如何存储PHP中的各种类型的呢
PHP中常见的变量类型是:
1。整数 / / /浮点长整数的布尔值等
2。一串
三.数组/关联数组
4。物体
5。资源
PHP商店的真实变量的类型根据zval类型字段,然后选择如何得到zvalue_value值根据类型,例如,整数和布尔值。
复制代码代码如下所示:
zval.type = is_long; / /塑料
zval.type = is_bool; / /布尔
对zval.value.lval,为bool值语句(0 | 1);
如果是双精度,或浮,zval。值的双将被删除。
如果它是一个字符串,那么:
复制代码代码如下所示:
zval.type = is_strin
在这个时候,你将采取:
zval.value.str
这也是一个结构,它具有C晶格的字符串和字符串的长度。
对于数组和对象,类型对应is_array,is_object,对应zval.value.ht和obj,分别。
特别是,资源非常特殊。在PHP中,资源是非常特殊的变量。任何不属于PHP内置变量的变量都将被视为保存资源,例如数据库句柄、打开文件句柄等:
复制代码代码如下所示:
类型= is_resourc
这一次,就拿起zval.value.lval的语句,指标是一个整数,那么PHP将根据相应的资源列表这一指标在内置的PHP资源查询(在这一部分中,我将打开一个单独的文章介绍),目前,只要你知道现在语句似乎对应的资源价值链偏移。
复制代码代码如下所示:
zend_fetch_resource(CON,类型,变量,默认情况下,resource_name,resource_type);
使用这种机制,PHP实现弱型,因为泽,它始终是它的脸,这是同一类型,变量。