7

我正在寻找一种替代方法,define('name', array)因为在定义中使用数组会给我这个错误:

常量只能计算为...中的标量值

我提到的数组只包含字符串。

4

5 回答 5

20

来自 php.net...

常数的值;只允许标量和空值。标量值是整数、浮点数、字符串或布尔值。可以定义资源常量,但不建议这样做,并且可能会导致不可预知的行为。

但是您可以使用一些技巧:

define('names', serialize(array('John', 'James' ...)));

& 使用时必须使用 unserialize() 常量值(名称)。这并不是那么有用,所以只需定义多个常量:

define('NAME1', 'John');
define('NAME2', 'James');
..

并像这样打印:

echo constant('NAME'.$digit);
于 2013-10-18T07:52:25.453 回答
8

如PHP 手册中所述,这在较新版本的 PHP 中发生了变化

从 PHP 5.6 开始,可以将常量定义为标量表达式,也可以定义数组常量

于 2017-06-11T19:50:18.110 回答
1

如果你在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',
);
于 2019-04-23T20:07:30.670 回答
0

定义只适用于定义常量;手册指出:

常数的值;只允许标量和空值。标量值是整数、浮点数、字符串或布尔值。可以定义资源常量,但不建议这样做,并且可能会导致不可预知的行为。

这就是数组不起作用的原因。

那么对于一个常量数组,你可以考虑构建一个包含这些常量的类,并且可以基于数组类型调用返回它们吗?

于 2013-10-18T07:51:01.417 回答
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);
于 2020-12-18T17:15:39.253 回答