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'];
-1
如果您使用的是PHP 5.6或更高版本,请使用Andrea Faulds的答案
我这样用它 . 我希望,它会帮助别人 .
config.php
class app{
private static $options = array(
'app_id' => 'hello',
);
public static function config($key){
return self::$options[$key];
}
}
class UserRoles {
public static function DEFAULT_ROLES() { return array('guy', 'development team'); }
}
//but, then the extra () looks weird...
initMyRoles( UserRoles::DEFAULT_ROLES() );
20 回答
NOTE: while this is the accepted answer, it's worth noting that in PHP 5.6+ you can have const arrays - see Andrea Faulds' answer below.
您还可以序列化您的数组,然后将其放入常量:
从PHP 5.6开始,您可以使用
const
声明一个数组常量:正如您所期望的那样,短语法也有效:
如果你有PHP 7,你最终可以使用
define()
,就像你第一次尝试一样:您可以将它们存储为类的静态变量:
如果您不喜欢其他人可以更改阵列的想法,那么getter可能有所帮助:
EDIT
从PHP5.4开始,甚至可以访问数组值而无需中间变量,即以下工作:
我这样用它 . 我希望,它会帮助别人 .
config.php
在文件中,我需要常量 .
这就是我使用的 . 它类似于soulmerge提供的示例,但是这样您就可以获得完整数组或数组中的单个值 .
像这样用它:
您可以将它作为JSON字符串存储在常量中 . 从应用的角度来看,JSON在其他情况下可能很有用 .
从PHP 5.6开始,您可以使用
const
关键字定义常量数组,如下所示可以访问不同的元素,如下所示:
从PHP 7开始,可以使用
define
定义常量数组,如下所示:并且可以像以前一样访问不同的元素 .
我知道这是一个有点老问题,但这是我的解决方案:
我定义它是因为我需要在常量中存储对象和数组,所以我也将runkit安装到php,所以我可以使$ const变量超全局 .
您可以将其用作
$const->define("my_constant",array("my","values"));
或仅用$const->my_constant = array("my","values");
要获得该值,只需调用
$const->my_constant;
使用爆炸和内爆功能,我们可以即兴创作解决方案:
这将回应
email
.如果你想让它更优化它你可以定义2个函数来为你做重复的事情:
希望有所帮助 . 快乐的编码 .
做某种ser / deser或编码/解码技巧似乎很难看,并且要求你记住在尝试使用常量时你究竟做了什么 . 我认为带有访问器的类私有静态变量是一个不错的解决方案,但我会做得更好 . 只需要一个返回常量数组定义的公共静态getter方法 . 这需要最少的额外代码,并且不能意外地修改数组定义 .
如果你想让它看起来像一个定义的常量你可以给它一个全部大写名称,但是记住在名字后添加'()'括号会很困惑 .
我想你可以使方法全局更接近你所要求的define()功能,但你真的应该使用常量名称作为范围并避免使用全局变量 .
你可以这样定义
是的,您可以将数组定义为常量 . 从 PHP 5.6 onwards 开始,可以将常量定义为标量表达式,它也是 possible to define an array constant . 可以将常量定义为资源,但应该避免,因为它可能会导致意外的结果 .
参考this link
有一个快乐的编码 .
PHP 7
从PHP 7开始,您只需使用define()函数来定义常量数组:
甚至可以使用Associative Arrays ..例如在类中 .
常量只能包含标量值,我建议您存储数组的序列化(或JSON编码表示) .
如果你从2009年开始看这个,并且你不喜欢AbstractSingletonFactoryGenerators,这里有一些其他的选择 .
请记住,数组在分配时会被“复制”,或者在这种情况下被返回,因此每次都可以获得相同的数组 . (请参阅PHP中数组的写时复制行为 . )
我同意eyze,常量往往是应用程序整个生命周期所需的单值 . 您可能会考虑使用配置文件而不是常量来进行此类操作 .
如果您确实需要常量数组,则可以使用命名约定来模拟数组:例如DB_Name,DB_USER,DB_HOST等 .
这是正确的,你不能使用数组作为常量,只能使用scaler和null . 将数组用于常量的想法似乎有点倒退 .
我建议做的是定义你自己的常量类并使用它来获得常量 .
您也可以将数组分解为一系列常量 . (一个相当古老的学校解决方案)毕竟,数组是恒定的,所以你唯一的原因需要它,是某些键的 global, fast, lookup .
因此:
会变成:
是的,要考虑名称空间污染(以及许多防止它的前缀) .