PHP 常量问题
大家讲道理
大家讲道理 2017-04-10 17:03:38
0
4
629

写了一段时间php
有一个问题特别想不明白
为什么使用define()定义常量
而它的值确可以是一个变量, 感觉完全不和逻辑呀!!

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

reply all(4)
大家讲道理

LZ要表达的是这个意思,因为$name是个变量,但是也还可以赋值给一个常量NAME

<?php
$name = "xuwenzhi";
define('NAME', $name);
echo NAME;

我的理解是php在进行词法分析时,就已经将$name值替换成了"xuwenzhi"这个字符串,而PHP在定义define()这个函数时,传进去的第二个参数实际上就是这个字符串的首地址,仅此而已,参考下define()函数的定义

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;
    }
    ...
}
Ty80

define()定义的常量不可更改

Peter_Zhu

它的值只能是string, int, boolean这种简单类型,用什么来定义不重要,因为它取的是define执行时这个变量的值。以后你的变量再怎么变常量也不会受影响。
不过,通常define之后那个变量也没什么价值了。

迷茫

常量和变量其实都是一个容器,看你如何去理解这个容器,比如JAVA的话用final String xx = xxx;来表达一个常量,实际上他定义的正确解释应该是另一个不可重写的变量xx这样。那个就简单了,定义了就不能改变的就是常量。PHP中另一个例子就是const,const定义的值在程序流程里面不能被改变,那么就可以理解为常量了。

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!