簡體   English   中英

在PHP中定義類常量

[英]Defining class constant in PHP

我想使用現有常量和字符串的串聯來定義類常量。 我無法預定義它,因為只允許使用標量來預定義常量,所以我現在將它作為構造函數的一部分,並使用defined()函數檢查它是否已經定義。 這個解決方案有效,但我的常數現在已經不必要了。

有沒有辦法在運行時在PHP中定義類常量?

謝謝。

請參閱類常量PHP手冊

該值必須是常量表達式,而不是(例如)變量,屬性,數學運算的結果或函數調用。

換句話說,這是不可能的。 你可以用runkit_constant_add做到這一點,但強烈建議不要使用這種猴子補丁。

另一種選擇是使用魔術方法__get()和__set()來拒絕對某些變量的更改。 這不是一個只讀變量的常量(從其他類的角度來看)。 像這樣的東西:

// Completely untested, just an idea
// inspired in part from the Zend_Config class in Zend Framework
class Foobar {

    private $myconstant;

    public function __construct($val) {
        $this->myconstant = $val;
    }

    public function __get($name) {
        // this will expose any private variables
        // you may want to only allow certain ones to be exposed
        return $this->$name;
    }

    public function __set($name) {
        throw new Excpetion("Can't set read-only property");
    }
}

根據戈登的回答 ,你不能做你想做的事。 但是,你可以做這樣的事情。 您只能設置一次:

class MyClass
{
    private static $myFakeConst;

    public getMyFakeConst()
    {
        return self::$myFakeConst;
    }

    public setMyFakeConst($val)
    {
        if (!is_null(self::$myFakeConst))
            throw new Exception('Cannot change the value of myFakeConst.');

        self::$myFakeConst = $val;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM