[英]Defining class constant in PHP
我想使用現有常量和字符串的串聯來定義類常量。 我無法預定義它,因為只允許使用標量來預定義常量,所以我現在將它作為構造函數的一部分,並使用defined()函數檢查它是否已經定義。 這個解決方案有效,但我的常數現在已經不必要了。
有沒有辦法在運行時在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.