search

Home  >  Q&A  >  body text

PHP 常量问题

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

大家讲道理大家讲道理2774 days ago632

reply all(4)I'll reply

  • 大家讲道理

    大家讲道理2017-04-10 17:05:38

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

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 17:05:38

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

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-10 17:05:38

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

    reply
    0
  • 迷茫

    迷茫2017-04-10 17:05:38

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

    reply
    0
  • Cancelreply