PHP定义数组的替代方法

8
我正在寻找另一种替代方式来使用define('name', array),因为在定义过程中使用数组会导致以下错误:

在……中,常量只能求得标量值。

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


1
“array”是什么?应该是“常量的值;只允许标量和空值。标量值是整数、浮点数、字符串或布尔值。” - Hanky Panky
这种方法值得使用。你为什么想要这样做?定义通常用于像配置之类的全局符号。有更好的方法,比如依赖注入。 - webbiedave
5个回答

22

来自php.net...

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

但你可以用一些技巧:

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

&你需要在使用常量值(名称)时使用unserialize()函数。这并不是非常有用,所以最好定义多个常量:

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

并像这样打印:

echo constant('NAME'.$digit);

7

在PHP的新版本中,这一点已经发生了变化,正如PHP手册所述

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


2
如果您使用的是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',
);

这对我很有效。谢谢。 - Piseth Sok

1

您可以使用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);

0

Define仅用于定义常量; 手册指出:

常量的值只能是标量和null值。标量值是整数、浮点数、字符串或布尔值。虽然可以定义资源常量,但不建议这样做,因为可能会导致不可预测的行为。

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

因此,对于常量数组,您可以考虑构建一个包含这些常量的类,并根据数组类型调用返回它们?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接