变量名 =》 zval
变量值 =》zend_value
问题:
引用计数
变量传递,变量赋值
变量的基础结构
变量值:zend_value
typedef union _zend_value {
zend_long lval; / long value /
double dval; / double value /
zend_refcounted counted;
zend_string str;
zend_array arr;
zend_object obj;
zend_resource res;
zend_reference ref;
zend_ast_ref ast;
zval zv;
void ptr;
zend_class_entry ce;
zend_function func;
struct {
uint32_t w1;
uint32_t w2;
} ww;
} zend_value;
变量名:_zval
typedef struct _zval_struct zval;
struct _zval_struct {
zend_value value; / value /
union {
struct {
ZEND_ENDIAN_LOHI_4(
zend_uchar type, / active type /
zend_uchar type_flags,
zend_uchar const_flags,
zend_uchar reserved) / call info for EX(This) /
} v;
uint32_t type_info;
} u1;
union {
uint32_t var_flags;
uint32_t next; / hash collision chain /
uint32_t cache_slot; / literal cache slot /
uint32_t lineno; / line number (for ast nodes) /
uint32_t num_args; / arguments number for EX(This) /
uint32_t fe_pos; / foreach position /
uint32_t fe_iter_idx; / foreach iterator index /
} u2;
};
变量类型type
/ regular data types /
#define IS_UNDEF 0
#define IS_NULL 1
#define IS_FALSE 2
#define IS_TRUE 3
#define IS_LONG 4
#define IS_DOUBLE 5
#define IS_STRING 6
#define IS_ARRAY 7
#define IS_OBJECT 8
#define IS_RESOURCE 9
#define IS_REFERENCE 10
/ constant expressions /
#define IS_CONSTANT 11
#define IS_CONSTANT_AST 12
/ fake types /
#define _IS_BOOL 13
#define IS_CALLABLE 14
/ internal types /
#define IS_INDIRECT 15
#define IS_PTR 17
true 和 flase 没有zend_value 结构, 直接通过type来区分,zend_long和double的变量指直接存储在_zend_value中,不需要额外的value指针。
DATETIME : 混合日期和时间值
TIMESTAMP : 混合日期和时间值,时间戳
TIME :时间值或持续时间
YEAR :年份值
CHAR :定长字符串
VARCHAR: 变长字符串
TINYBLOB : 不超过255个字符的二进制字符串
BLOB :二进制形式的长文本数据
MEDIUMBLOB : 0 - 16777215字节 二进制形式的中等长度文本数据
LONGBLOB : 0 - 4294967295字节 二进制形式的极大文本数据
TINYTEXT : 0 - 255字节 短文本字符串
TEXT : 0 - 65535字节 长文本数据文本
MEDIUMTEXT : 0 - 16777215字节 中等长度文本数据
LONGTEXT : 0 - 4294967295字节 极大文本数据
ENUM : 枚举;列可赋予某个枚举成员
SET :集合;列可赋予多个集合成员
BINARY :类似Char的二进制存储,特点是插入定长不足补0
VARBINARY : 类似VarChar的变长二进制存储,特点是定长不补0
BIT :无符号[0,255],有符号[-128,127]
BOOLEAN : 布尔型,功能等同于微整型TINYTINT
GEOMETRY :层次结构的根类
POINT :点。指的是代表坐标空间中单个位置的几何类
LINESTRING :具有点之间线性内插特性的Curve
POLYGON :代表多边几何对象的平面Surface
MULTIPOINT :一种由Point元素构成的几何对象集合
MULTILINESTRING : 是一种由 LineString元素构成的MultiCurve几何对象集合
MULTIPOLYGON:是一种由Polygon元素构成的几何对象集合
参考资料:
1、输出。
Python: print 默认换行,不换行要加逗号。
PHP: echo 可以输出多个变量;print ()只输出一个变量,且成功返回值为1,失败为0;print_r() 只输出数组;die() 先输出,后关机;printf() 格式化输出字符串;var_dump()可以判断一个变量的类型与长度,并输出变量的数。
2、数据类型。
PHP:七个数据类型:String,Integer,Float,Boolean,Array,Object,NULL
Python:五个标准的数据类型:Number,String,List,Tuple,Dictionary 其中包括Numberint,long,float,complex
3、访问权限。
PHP:三种访问权限,由高到低为public,protected,private
Python: _foo代表不能直接访问的类属性,需要通过类提供的接口访问;__foo代表类的私有成员;__foo__特殊方法专用的标识
4、定义变量和方法。
PHP: 弱类型语言,用$定义变量,一般情况下变量引用变量时也要带着$(区别于Java), 在类中定义变量时还要加var ,定义方法时 function test (){} 要用function声明。
Python:弱类型语言,定义变量时直接写,除了访问权限修饰符不需要加别的。定义方法时 def __init__(self,name): 要用def声明,self是必须要加的常量,代表该类的对象,方法体不用{}。
以上就是关于PHP变量名、变量值、类型全部的内容,包括:PHP变量名、变量值、类型、PHP网站建设mysql数据库,以下字符是什么中文意思呢、python与php的区别 专家解析python与php的四大区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)