替代定义数组php

时间:2013-10-18 07:45:00

标签: php arrays constants global scalar

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

  

常量只能评估......中的标量值

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

5 个答案:

答案 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);