PHP常量数组

这是唯一的方法有数组作为常量在PHP或是这个不好的代码:

class MyClass { private static $myArray = array('test1','test2','test3'); public static function getMyArray() { return self::$myArray; } } 

你的代码很好 – 在5.6版之前,数组不能被声明为常量,所以静态方法可能是最好的方法。 您应该考虑通过注释将这个variables标记为常量:

 /** @const */ private static $myArray = array(...); 

使用PHP 5.6.0或更新版本,您可以声明数组为常量:

 const myArray = array(...); 

从PHP 5.6.0(2014年8月28日)开始,可以定义一个数组常量(请参阅PHP 5.6.0新增function )。

 class MyClass { const MYARRAY = array('test1','test2','test3'); public static function getMyArray() { /* use `self` to access class constants from inside the class definition. */ return self::MYARRAY; } } /* use the class name to access class constants from outside the class definition. */ echo MyClass::MYARRAY[0]; // echo 'test1' echo MyClass::getMyArray()[1]; // echo 'test2' $my = new MyClass(); echo $my->getMyArray()[2]; // echo 'test3' 

使用PHP 7.0.0(2015年12月3日),可以使用define()定义数组常量。 在PHP 5.6中,它们只能用const来定义。 (请参阅PHP 7.0.0新function )

 define('MYARRAY', array('test1','test2','test3')); 

我遇到这个线程自己寻找答案。 在思考之后,我将不得不通过我需要的每个函数来传递我的数组。我对数组和MySQL的经验让我怀疑序列化是否可行。 当然是的。

 define("MYARRAY", serialize($myarray)); function something() { $myarray= unserialize(MYARRAY); } 

标记静态是一个很好的select。 下面是一个封装静态数组以获得某种持续行为的示例。

 class ArrayConstantExample { private static $consts = array( 'CONST_MY_ARRAY' => array( 1,2,3,4 ) ); public static function constant($name) { return self::$consts[$name]; } } var_dump( ArrayConstantExample::constant('CONST_MY_ARRAY') ); 

打印:

 array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) } 

我build议使用以下内容:

 class MyClass { public static function getMyArray() { return array('test1','test2','test3'); } } 

这样你有一个const数组,你可以保证没有人可以改变它,甚至不是类本身的方法。

可能的微型优化(不知道现在有多lessPHP编译器优化):

 class MyClass { public static function getMyArray() { static $myArray = array('test1','test2','test3'); return $myArray; } } 

你已经创build了一个静态数组, 而不是一个常量数组。 静态variables是可变的; 常数是不可变的。 你的代码并不坏,但是它没有做你打算做的事情。

在PHP 5.6中,你可以声明const数组。 请看我以前的解释 。

也许你想要这样的东西:

 class MyClass { const MY_ARRAY = array('test1','test2','test3'); public function getMyArray() { return MY_ARRAY; } } 

请注意,常量没有$前缀,这表明它们的不变性。 $foo是一个variables; FOO不是。 此外,常量名称总是大写,至less在我已经接触到的编程语言。 这不是编译器强制执行的; 它只是一个(几乎?)通用编码风格约定。 publicprotectedprivate可见性关键字不适用于常量。 最后, static可能或可能适用,取决于你是否希望函数是static

从PHP 5.6开始,可以将一个常量定义为一个标量expression式,也可以定义一个数组常量。

 class foo { const KEYS = [1, 3, 6, 7]; } // echo foo::KEYS[0]; // 1