我正在寻找另一种替代方式来使用
define('name', array)
,因为在定义过程中使用数组会导致以下错误:
在……中,常量只能求得标量值。
我提到的数组仅包含字符串。
来自php.net...
常量的值;只允许标量和null值。标量值是整数、浮点数、字符串或布尔值。可以定义资源常量,但不建议这样做,因为可能会导致不可预测的行为。
但你可以用一些技巧:
define('names', serialize(array('John', 'James' ...)));
&你需要在使用常量值(名称)时使用unserialize()函数。这并不是非常有用,所以最好定义多个常量:
define('NAME1', 'John');
define('NAME2', 'James');
..
并像这样打印:
echo constant('NAME'.$digit);
php5.6
,并且您知道该版本以上的php 支持将数组作为常量。但是您仍然会收到以下警告... "最初的回答"Warning: Constants may only evaluate to scalar values
那么你很幸运。因为在这个版本中,使用define()
定义数组常量的方法仍未引入,而只在phpv7.xx
中引入。
因此,您可以使用const
关键字代替。
“Original Answer”翻译成中文是“最初的回答”。
const MY_SUPER_CONSTANT = array(
'cool_key' => 'Cool Value',
'ultra_fab_key' => 'Fabulous Value',
);
您可以使用json_encode
函数将数组编码为JSON字符串,并将其定义为常量,以便在任何可访问该常量的地方使用。
例如:
// Define the array
$MyArray = array(
"mykey" => "myvalue",
"mykey1" => "myvalue1"
);
define('MYARRAY', json_encode($MyArray));
// Decode the constant and use.
$UseMyArray = json_decode(MYARRAY);
Define仅用于定义常量; 手册指出:
常量的值只能是标量和null值。标量值是整数、浮点数、字符串或布尔值。虽然可以定义资源常量,但不建议这样做,因为可能会导致不可预测的行为。
这就是为什么数组不起作用的原因。
因此,对于常量数组,您可以考虑构建一个包含这些常量的类,并根据数组类型调用返回它们?