这个失败:
define('DEFAULT_ROLES', array('guy', 'development team'));
显然,常量不能保存数组。解决这个问题的最好方法是什么?
define('DEFAULT_ROLES', 'guy|development team');
//...
$default = explode('|', DEFAULT_ROLES);
这似乎是不必要的努力。
这个失败:
define('DEFAULT_ROLES', array('guy', 'development team'));
显然,常量不能保存数组。解决这个问题的最好方法是什么?
define('DEFAULT_ROLES', 'guy|development team');
//...
$default = explode('|', DEFAULT_ROLES);
这似乎是不必要的努力。
当前回答
使用爆炸和内爆函数,我们可以临时想出一个解决方案:
$array = array('lastname', 'email', 'phone');
define('DEFAULT_ROLES', implode (',' , $array));
echo explode(',' ,DEFAULT_ROLES ) [1];
这将回复邮件。
如果你想让它更优化,你可以定义2个函数来做重复的事情,像这样:
//function to define constant
function custom_define ($const , $array) {
define($const, implode (',' , $array));
}
//function to access constant
function return_by_index ($index,$const = DEFAULT_ROLES) {
$explodedResult = explode(',' ,$const ) [$index];
if (isset ($explodedResult))
return explode(',' ,$const ) [$index] ;
}
希望这能有所帮助。快乐编码。
其他回答
PHP 5.6+引入了const数组——参见Andrea Faulds的回答。
你也可以序列化你的数组,然后把它放入常量:
# define constant, serialize array
define ("FRUITS", serialize (array ("apple", "cherry", "banana")));
# use it
$my_fruits = unserialize (FRUITS);
从PHP 5.6开始,你可以用const声明一个数组常量:
<?php
const DEFAULT_ROLES = array('guy', 'development team');
短语法也可以,正如你所期望的那样:
<?php
const DEFAULT_ROLES = ['guy', 'development team'];
如果你有PHP 7,你最终可以使用define(),就像你第一次尝试的那样:
<?php
define('DEFAULT_ROLES', array('guy', 'development team'));
PHP 7 +。
从PHP 7开始,你可以使用define()函数定义一个常量数组:
define('ANIMALS', [
'dog',
'cat',
'bird'
]);
echo ANIMALS[1]; // outputs "cat"
你可以将它们存储为类的静态变量:
class Constants {
public static $array = array('guy', 'development team');
}
# Warning: array can be changed lateron, so this is not a real constant value:
Constants::$array[] = 'newValue';
如果你不喜欢数组可以被其他人更改的想法,getter可能会有所帮助:
class Constants {
private static $array = array('guy', 'development team');
public static function getArray() {
return self::$array;
}
}
$constantArray = Constants::getArray();
EDIT
从PHP5.4开始,甚至可以在不需要中间变量的情况下访问数组值,即以下工作:
$x = Constants::getArray()['index'];
我知道这是一个有点老的问题,但这是我的解决方案:
<?php
class Constant {
private $data = [];
public function define($constant, $value) {
if (!isset($this->data[$constant])) {
$this->data[$constant] = $value;
} else {
trigger_error("Cannot redefine constant $constant", E_USER_WARNING);
}
}
public function __get($constant) {
if (isset($this->data[$constant])) {
return $this->data[$constant];
} else {
trigger_error("Use of undefined constant $constant - assumed '$constant'", E_USER_NOTICE);
return $constant;
}
}
public function __set($constant,$value) {
$this->define($constant, $value);
}
}
$const = new Constant;
我定义它是因为我需要在常量中存储对象和数组,所以我也安装了runkit到php,这样我就可以使$const变量超全局。
你可以使用它作为$const->define("my_constant",array("my","values"));或者只是$const->my_constant = array("my","values");
要获取该值,只需调用$const->my_constant;