写了一段时间php
有一个问题特别想不明白
为什么使用define()
定义常量
而它的值确可以是一个变量, 感觉完全不和逻辑呀!!
写了一段时间php
有一个问题特别想不明白
为什么使用define()
定义常量
而它的值确可以是一个变量, 感觉完全不和逻辑呀!!
LZ要表达的是这个意思,因为$name是个变量,但是也还可以赋值给一个常量NAME
<code><?php $name = "xuwenzhi"; define('NAME', $name); echo NAME;</code></code>
我的理解是php在进行词法分析时,就已经将$name值替换成了"xuwenzhi"这个字符串,而PHP在定义define()这个函数时,传进去的第二个参数实际上就是这个字符串的首地址,仅此而已,参考下define()函数的定义
<code>ZEND_FUNCTION(define) { char *name; int name_len; zval *val; //用于接收"xuwenzhi" if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|b", &name, &name_len, &val, &non_cs) == FAILURE) { return; } ... }</code>
用define()
定义的常量不可更改
它的值只能是string, int, boolean这种简单类型,用什么来定义不重要,因为它取的是define执行时这个变量的值。以后你的变量再怎么变常量也不会受影响。
不过,通常define之后那个变量也没什么价值了。
常量和变量其实都是一个容器,看你如何去理解这个容器,比如JAVA的话用final String xx = xxx;来表达一个常量,实际上他定义的正确解释应该是另一个不可重写的变量xx这样。那个就简单了,定义了就不能改变的就是常量。PHP中另一个例子就是const,const定义的值在程序流程里面不能被改变,那么就可以理解为常量了。