PHP 常量問題

來源:互聯網
上載者:User
寫了一段時間php
有一個問題特別想不明白
為什麼使用 define()定義常量
而它的值確可以是一個變數, 感覺完全不和邏輯呀!!

回複內容:

寫了一段時間php
有一個問題特別想不明白
為什麼使用define()定義常量
而它的值確可以是一個變數, 感覺完全不和邏輯呀!!

LZ要表達的是這個意思,因為$name是個變數,但是也還可以賦值給一個常量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; } ...}

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

它的值只能是string, int, boolean這種簡單類型,用什麼來定義不重要,因為它取的是define執行時這個變數的值。以後你的變數再怎麼變常量也不會受影響。
不過,通常define之後那個變數也沒什麼價值了。

常量和變數其實都是一個容器,看你如何去理解這個容器,比如JAVA的話用final String xx = xxx;來表達一個常量,實際上他定義的正確解釋應該是另一個不可重寫的變數xx這樣。那個就簡單了,定義了就不能改變的就是常量。PHP中另一個例子就是const,const定義的值在程式流程裡面不能被改變,那麼就可以理解為常量了。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.