我正在寻找一种替代方法,define('name', array)
因为在定义中使用数组会给我这个错误:
常量只能计算为...中的标量值
我提到的数组只包含字符串。
来自 php.net...
常数的值;只允许标量和空值。标量值是整数、浮点数、字符串或布尔值。可以定义资源常量,但不建议这样做,并且可能会导致不可预知的行为。
但是您可以使用一些技巧:
define('names', serialize(array('John', 'James' ...)));
& 使用时必须使用 unserialize() 常量值(名称)。这并不是那么有用,所以只需定义多个常量:
define('NAME1', 'John');
define('NAME2', 'James');
..
并像这样打印:
echo constant('NAME'.$digit);
如PHP 手册中所述,这在较新版本的 PHP 中发生了变化
从 PHP 5.6 开始,可以将常量定义为标量表达式,也可以定义数组常量。
如果你在php5.6
并且你知道这个版本以后的 php确实支持数组作为常量。但是您仍然收到以下警告...
Warning: Constants may only evaluate to scalar values
那么你很幸运。define()
因为这个版本还没有介绍定义数组常量using的方法,只在里面介绍了phpv7.xx
因此,您可以使用const
关键字。
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);