>  기사  >  백엔드 개발  >  PHP 常量问题

PHP 常量问题

WBOY
WBOY원래의
2016-06-06 20:14:45949검색

写了一段时间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定义的值在程序流程里面不能被改变,那么就可以理解为常量了。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.