PHP重新学习(三)——PHP变量
来源:互联网 发布:兔子软件安装器 编辑:程序博客网 时间:2024/06/16 16:09
变量具有三个基本组成部分:
1、名称 变量的标示符。就像小狗一样,主人可能会给这些小狗起个喜欢的名称。变量命名上,PHP继承了Perl的语法风格,变量以美元符号开始,后面跟变量名。一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。 PHP同时还支持复合变量,也就是类似$$a的变量,它会进行两次的解释。这给PHP带来了非常灵活的动态特性。
2、类型 变量的类型,就像小狗的品种,牧羊犬、拉布拉多犬、中华田园犬等等。在很多静态语言中,变量在定义时就指定了,在程序运行过程中都不允许进行变更。但对于像PHP属于弱类型的动态语言中,可以随便赋予它任何类型的值。
3、值内容。这是标示所代表的具体内容。这就像是实实在在的小狗的这个实物。你可以给任何一条小狗起名为:小黄,在编程语言中也是如此,你可以给变量赋予它所能表示范围的值。不过在同一时间,变量只能有一个值。
我们知道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。
- PHP重新学习(三)——PHP变量
- php 学习笔记 —— 全局变量 魔术变量 (三)
- PHP重新学习(二)——PHP数据类型
- PHP学习(三)--变量的类型
- PHP学习——变量
- PHP学习——变量
- PHP重新学习(一)——PHP的基本语法
- php (三) PHP变量类型
- php学习(三)
- PHP入门学习笔记之—— PHP 变量
- PHP学习笔记—— PHP可变变量;
- PHP学习笔记—— PHP变量引用;
- PHP学习笔记——php变量类型;
- PHP学习笔记——php变量其它数据类型;
- PHP学习笔记——PHP变量的范围;
- PHP学习笔记——PHP变量的范围;
- php——学习笔记,可变变量
- PHP学习笔记——静态变量;
- Linux对拍模板
- 添加图例和注解
- Jzoj4756 幻象
- 牛客网错题集锦1
- 1041. 考试座位号(15)
- PHP重新学习(三)——PHP变量
- 用c语言实现strcmp
- 【数据结构】:二叉搜索树
- 换了个地方,来北京工作,面试了4家python爬虫,写一些这四家(记得的)笔试题(2)
- 对数组进行快速排序
- 聚簇和非聚簇的区别
- 《模仿游戏》—— Alan · Turing 的传奇
- P2327 [SCOI2005]扫雷
- 2017年10月20日提高T3 编译优化