我正在寻找define('name', array)
的替代方案,因为在define中使用数组会给我这个错误:
常量只能评估......中的标量值
我提到的数组只包含字符串。
答案 0 :(得分:17)
来自php.net ...
常数的值;只有标量和空值 允许即可。标量值是整数,浮点数,字符串或布尔值。 可以定义资源常量,但事实并非如此 建议并可能导致不可预测的行为。
但你可以做一些技巧:
define('names', serialize(array('John', 'James' ...)));
&安培;使用时必须使用unserialize()常量值(名称)。这不是那么有用&所以只需定义多个常量:
define('NAME1', 'John');
define('NAME2', 'James');
..
并按照以下方式打印:
echo constant('NAME'.$digit);
答案 1 :(得分:7)
在较新版本的PHP中,这已发生变化,如stated in the PHP manual
从PHP 5.6开始,可以将常量定义为标量表达式,也可以定义数组常量。
答案 2 :(得分:0)
定义仅用于定义常量; The manual州:
常数的值;只允许标量和空值。标量值是整数,浮点数,字符串或布尔值。可以定义资源常量,但不建议这样做,并且可能导致不可预测的行为。
这就是数组不起作用的原因。
因此,对于一个常量数组,您可以考虑构建一个包含这些常量的类,并根据数组类型调用返回它们吗?
答案 3 :(得分:0)
如果您使用的是php5.6
,并且您知道此版本的php 确实支持将数组作为常量。但是您仍然收到以下警告...
Warning: Constants may only evaluate to scalar values
那么,您很幸运。这是因为在此版本中仍未引入使用define()
定义数组常量的方法,而仅在phpv7.xx
因此,您可以使用const
关键字。
const MY_SUPER_CONSTANT = array(
'cool_key' => 'Cool Value',
'ultra_fab_key' => 'Fabulous Value',
);
答案 4 :(得分:0)
您可以使用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);