php变量数据 php变量的基本概念( 三 )


语法
可以用 define() 函数来定义常量 。一个常量一旦被定义 , 就不能再改变或者取消定义 。
常量只能包含标量数据(boolean,integer,float 和 string) 。
可以简单的通过指定其名字来取得常量的值,不要在常量前面加上 $ 符号 。如果常量名是动态的,也可以用函数 constant() 来读取常量的值 。用 get_defined_constants() 可以获得所有已定义的常量列表 。
注: 常量和(全局)变量在不同的名字空间中 。这意味着例如 TRUE 和 $TRUE 是不同的 。
如果使用了一个未定义的常量,PHP 假定你想要的是该常量本身的名字,如同你用字符串调用它一样(CONSTANT 对应 "CONSTANT") 。此时将发出一个 E_NOTICE 级的错误 。参见手册中为什么 $foo[bar] 是错误的(除非你事先用 define() 将 bar 定义为一个常量) 。如果你只想检查是否定义了某常量,用 defined() 函数 。
常量和变量不同:
常量前面没有美元符号($);
常量只能用 define() 函数定义 , 而不能通过赋值语句;
常量可以不用理会变量范围的规则而在任何地方定义和访问;
常量一旦定义就不能被重新定义或者取消定义;
常量的值只能是标量 。
以上来自上海优就业老师进行的总结,关于上海IT培训PHP开发更多了解:网页链接
PHP变量名、变量值、类型变量名 =》 zval
变量值 =》zend_value
问题:
引用计数
变量传递,变量赋值
变量的基础结构
变量值:zend_value
typedef union _zend_value {
zend_longlval;/* long value */
doubledval;/* 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_structzval;
struct _zval_struct {
zend_valuevalue;/* value */
union {
struct {
ZEND_ENDIAN_LOHI_4(
zend_uchartype,/* active type */
zend_uchartype_flags,
zend_ucharconst_flags,
zend_ucharreserved)/* call info for EX(This) */
} v;
uint32_t type_info;
} u1;
union {
uint32_tvar_flags;
uint32_tnext;/* hash collision chain */
uint32_tcache_slot;/* literal cache slot */
uint32_tlineno;/* line number (for ast nodes) */
uint32_tnum_args;/* arguments number for EX(This) */
uint32_tfe_pos;/* foreach position */
uint32_tfe_iter_idx;/* foreach iterator index */
} u2;
};
变量类型【type】
/* regular data types */
#define IS_UNDEF0
#define IS_NULL1
#define IS_FALSE2
#define IS_TRUE3
#define IS_LONG4
#define IS_DOUBLE5
#define IS_STRING6
#define IS_ARRAY7
#define IS_OBJECT8
#define IS_RESOURCE9
#define IS_REFERENCE10
/* constant expressions */
#define IS_CONSTANT11
#define IS_CONSTANT_AST12
/* fake types */
#define _IS_BOOL13
#define IS_CALLABLE14
/* internal types */
#define IS_INDIRECT15
#define IS_PTR17
true 和 flase 没有zend_value 结构,直接通过type来区分,zend_long和double的变量指直接存储在_zend_value中,不需要额外的value指针 。
【php变量数据 php变量的基本概念】关于php变量数据和php变量的基本概念的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读