簡體   English   中英

在PHP中定義全局常量數組的最“優雅”方法是什么

[英]What is the most “elegant” way to define a global constant array in PHP

我想知道你認為什么是最好和最干凈的方法來定義一個類似於定義函數工作方式的常量數組變量。 我見過很多人在谷歌問這個問題,到目前為止我提出的最簡單的解決方案是在define語句中使用PHP 序列化函數,就像這樣

define ("MY_ARRAY", serialize (array ("key1" => $value1,"key2" => $value2, ..)));

然后使用定義的常量你可以做這樣的事情:

$MY_ARRAY = unserialize (MY_ARRAY)
print_r ($MY_ARRAY);

如果您的代碼中有很多定義 ,不確定序列化函數是否會降低您的速度。 你怎么看?

$GLOBALS['MY_ARRAY'] = array();

序列化,特別是反序列化非常尷尬。 (另一方面,為什么腳本語言不能將數組作為常量也不太清楚......)

但這實際上取決於使用模式。 通常,您需要用於存儲配置設置的全局定義。 全局變量和常量是適當的用途(盡管“全局變量是邪惡的!1!”meme)。 但建議至少將所有內容都放入某種注冊表對象或數組中:

class config {
     var $MY_ARRAY = array("key1"=>...);
     var $data_dir = "/tmp/";
} 

這為config::$MY_ARRAY提供了最簡單的訪問語法。 這不是一個常數,但你很容易偽造它。 只需使用ArrayObject或ArrayAccess,並以一種使屬性為只讀的方式實現它。 (使offsetSet拋出錯誤。)

如果你想要一個全局數組常量解決方法,那么另一種選擇(我從定義手冊頁中竊取了這個想法)是使用函數來代替常量:

function MY_ARRAY() {
     return array("key1" => $value1,);
}

訪問再次不是很穩定,但MY_ARRAY()足夠短。 雖然PHP 5.3之前不可能使用MY_ARRAY()["key1"]進行良好的數組訪問; 但同樣可以用MY_ARRAY("key1")偽造。

暫無
暫無

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

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