我們可以這樣定義是否有可能宣佈一個數組恆定
define("aconstant','avalue');
恆定我們不能以這種方式定義數組像下面?
define("months",array("January", "February", ---);
我們可以這樣定義是否有可能宣佈一個數組恆定
define("aconstant','avalue');
恆定我們不能以這種方式定義數組像下面?
define("months",array("January", "February", ---);
UPDATE:這是有可能在PHP 7(reference)
// Works as of PHP 7
define('ANIMALS', array(
'dog',
'cat',
'bird'
));
echo ANIMALS[1]; // outputs "cat"
原來的答案
從php.net ...
常數的值;只有標量和空值是 允許。標量值是整數,浮點數,字符串或布爾值。 可以定義資源常量,但不推薦使用 ,並可能導致不可預知的行爲。
$months = array("January,"February",...)
就好了。
爲防萬一別人不注意其他答案,可以在PHP 5.6中創建一個「const」數組或者新。 – orrd 2015-09-05 06:52:20
不是'$ months = array(「January,」February「,...)'缺少一個引號嗎? – 2015-12-04 22:26:09
只需要清楚,PHP 7的介紹也包含關聯數組。'define('MY_ANIMALS',array ('dog'=>'Ottie','cat'=>'Garfield','bird'=>'Tweetie')); echo MY_ANIMALS ['cat']; //輸出'Garfield'' – owenmck 2015-12-10 12:22:16
不,你不能。見PHP: Syntax - Manual
只有標量數據(布爾,整數,浮點和串)可以被包含在常量。 可以將常量定義爲資源,但應避免使用它,因爲它可能會導致意外的結果。
+1我想知道爲什麼PHP允許首先定義常量資源? – BoltClock 2010-09-27 11:56:55
@ BoltClock的一個獨角獸:我不完全清楚,從來沒有遇到過這樣的解釋。但考慮到PHP的發展歷史,它不會因爲一些'歷史原因'而感到驚訝...... :) – 2010-09-27 12:06:11
你可以把裏面的常數陣列,一個黑客:
define('MONTHS', serialize(array('January', 'February' ...)));
但你必須unserialize()
需要時恆定值,我想這是不是真的有用。
作爲替代方案,定義多個常數:
define('MONTH_1', 'January');
define('MONTH_2', 'February');
...
並使用constant()
功能來查找值:
echo constant('MONTH_'.$month);
+1,但我想知道,json_encode和json_decode怎麼樣?哪一個更適合內存和性能? – jeff 2014-02-11 16:56:23
@CengizFrostclaw:'serialize' would b在大多數情況下更好。即使它最終變慢了一點(我猜想它與事實相反),但它本身支持PHP概念,如引用和類型化對象,這些概念在JSON中的往返行程中無法生存。 – cHao 2014-03-11 12:49:28
@cHao,是的序列化速度更快,但它也可能執行代碼也很危險。即使這裏不適用,我認爲安全意識的開發人員應該習慣使用最危險的方法。在這種情況下,性能差異可以忽略不計,我認爲JSON方法在這裏更好。 – 2014-12-08 13:23:23
如果你必須有一個恆定的,如何使用AA分隔字符串和爆炸成一個數組?
define("MONTHS", "January;February;March");
$months = explode(";",MONTHS);
不錯的選擇,我會很好奇看到性能與序列化。 – siliconrockstar 2014-04-10 15:01:21
我想這將需要一個大陣才能真正有顯着的區別。 – 2014-04-16 12:58:30
可以使用常量以來PHP 5.6(通過nikic)的目的所在。
const months = ["January", "February"];
var_dump("January" === months[0]);
這真的應該有更多upvotes(不只是我的^^)。 – Levit 2014-12-03 10:38:39
@Levit:我會upvote一次,我實際上可以使用5.6 :) – cHao 2014-12-11 04:16:59
@cHao:好的! ^^儘管如此,我還是喜歡它在5.6中是可能的,事實上這是5.6以後的最乾淨/完美的答案。即使5.3仍然是主要使用的,而5.6運行在所有php網站的不到1%的情況下,這僅僅是爲了指出該功能的存在(並且從現在開始多年,當這些版本更多時標準,這不會坐在1 upvote,而使用變量的建議有超過200 upvotes +接受)。咆哮,我真的很喜歡你的評論! ^^ – Levit 2014-12-11 07:27:09
您可以使用JSON格式將數組保存到字符串中,然後將此字符串分配給常量。
$months = array("January","February","March");
define('MONTHS', json_encode($months));
當你想使用它:
$months = json_decode(MONTHS);
PHP 5.x的最佳答案! – 2017-07-07 04:15:24
隨着PHP 5.6的,有可能to declare constant arrays。鏈接的文檔使用示例const ARR = ['a', 'b'];
。你也可以做const ARR = array('a', 'b');
。然而,在5.6中有一個奇怪的怪癖:你可以使用const
來聲明常量數組,但不是define()
。這個has been corrected在PHP 7.0中。
您可以稍微將數組轉換爲字符串並將其存儲爲常量。當你需要它時,你只需要重新轉換它。看看(un)序列化的例子: http://stackoverflow.com/questions/1290318/php-constants-containing-arrays – Armfoot 2013-06-27 07:59:11
是的,從PHP 5.6上你可以做到這一點。請參閱http://stackoverflow.com/a/26470982/1163786 – 2015-01-03 20:53:42