完成php弱类型变量的办法:一、经过Zend引擎用C完成弱类型,正在ZE顶用构造体zval来保留;二、经过Zend引擎是判断、存储PHP中的多种数据类型,依据type来抉择猎取【zvalue_value】的值。
完成php弱类型变量的办法:
PHP是弱类型,静态的言语剧本。正在声明一个变量的时分,其实不需求指明它保留的数据类型。例如:
<?php $var = 1; $var = "variable"; $var = 1.00; $var = array(); $var = new Object();
静态变量,正在运转时期是能够扭转的,而且正在应用前无需申明变量类型。
相干学习保举:PHP编程从入门到通晓
成绩1、Zend引擎是若何用C完成这类弱类型的呢?
实际上,正在PHP中申明的变量,正在ZE中都是用构造体zval来保留的。
起首咱们关上Zend/zend.h
来看zval的界说:
typedef struct _zval_struct zval; struct _zval_struct { /* Variable information */ zvalue_value value; /* value */ zend_uint refcount__gc; zend_uchar type; /* active type */ zend_uchar is_ref__gc; }; typedef union _zvalue_value { long lval; /* long value */ double dval; /* double value */ struct { char *val; int len; } str; HashTable *ht; /* hash table value */ zend_object_value obj; } zvalue_value;
Zend/zend_types.h:
typedef unsigned char zend_bool; typedef unsigned char zend_uchar; typedef unsigned int zend_uint; typedef unsigned long zend_ulong; typedef unsigned short zend_ushort;
从上述代码中,能够看到_zvalue_value
是真正保留数据的要害局部。经过共用体完成的弱类型变量申明
成绩2、Zend引擎是若何判断、存储PHP中的多种数据类型的呢?
_zval_struct.type
中存储着一个变量的真正类型,依据type来抉择若何猎取zvalue_value的值。
type值列表(Zend/zend.h):
#define IS_NULL 0 #define IS_LONG 1 #define IS_DOUBLE 2 #define IS_BOOL 3 #define IS_ARRAY 4 #define IS_OBJECT 5 #define IS_STRING 6 #define IS_RESOURCE 7 #define IS_CONSTANT 8 #define IS_CONSTANT_ARRAY 9
来看一个简略的例子:
<?php $a = 1; //此时zval.type = IS_LONG,那末zval.value就去取lval. $a = array(); //此时zval.type = IS_ARRAY,那末zval.value就去取ht.
这此中最复杂的,而且正在开发第三方扩大中常常需求用到的是”资本类型”.
正在PHP中,任何没有属于PHP的内建的变量类型的变量,城市被看做资本来进行保留。
比方:数据库句柄、关上的文件句柄、关上的socket句柄。
资本类型,会用lval,此时它是一个整型批示器, 而后PHP会再依据这个批示器正在PHP内建的一个资本列表中查问绝对应的资本。
恰是由于ZE这样的解决形式,使PHP就完成了弱类型,而关于ZE的来讲,它所面临的永远都是同一品种型zval。
以上就是php弱类型变量若何完成?的具体内容,更多请存眷资源魔其它相干文章!
标签: php php教程 php故障解决 php使用问题 弱类型变量
抱歉,评论功能暂时关闭!