您的当前位置:首页正文

PHP重新学习(三)——PHP变量

2024-11-23 来源:个人技术集锦

变量具有三个基本组成部分:


1、名称 变量的标示符。就像小狗一样,主人可能会给这些小狗起个喜欢的名称。变量命名上,PHP继承了Perl的语法风格,变量以美元符号开始,后面跟变量名。一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。 PHP同时还支持复合变量,也就是类似$$a的变量,它会进行两次的解释。这给PHP带来了非常灵活的动态特性。


2、类型 变量的类型,就像小狗的品种,牧羊犬、拉布拉多犬、中华田园犬等等。在很多静态语言中,变量在定义时就指定了,在程序运行过程中都不允许进行变更。但对于像PHP属于弱类型的动态语言中,可以随便赋予它任何类型的值。


3、值内容。这是标示所代表的具体内容。这就像是实实在在的小狗的这个实物。你可以给任何一条小狗起名为:小黄,在编程语言中也是如此,你可以给变量赋予它所能表示范围的值。不过在同一时间,变量只能有一个值。


PHP中组成变量名的字母可以是英文字母 a-z,A-Z,还可以是 ASCII 字符从 127 到 255(0x7f-0xff)。 变量名是区分大小写的。


我们知道PHP是用C语言来实现的,但C是强类型语言,那C是怎样实现PHP的弱类型的呢?

①PHP中的变量是通过zval结构体来实现的,zval结构体定义在Zend/zend.h文件,其结构如下:

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;
};

其中refcount__gc表示引用计数,默认值为1;

is_ref__gc表示是否引用,默认值为0;

value表示存储变量的具体的值;type表示变量的具体类型,

type的值可以为: IS_NULL、IS_BOOL、IS_LONG、IS_DOUBLE、IS_STRING、IS_ARRAY、IS_OBJECT和IS_RESOURCE 之一。


②变量具体值存储在zvalue_value联合体中,结构定义如下:
这里使用联合体而不是用结构体是出于空间利用率的考虑,因为一个变量同时只能属于一种类型

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;

其中PHP的boolean、integer、resource类型可以通过lval字段来存储;

float(double)类型可以通过dval字段存储;

string类型通过str字段存储;array类型用ht字段存储;

object类型用obj字段存储;

NULL类型的变量值不需要存储,只需要把(zval).type标为IS_NULL。


显示全文