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在我已经接触到的编程语言。 这不是编译器强制执行的; 它只是一个(几乎?)通用编码风格约定。 public
, protected
和private
可见性关键字不适用于常量。 最后, static
可能或可能适用,取决于你是否希望函数是static
。
从PHP 5.6开始,可以将一个常量定义为一个标量expression式,也可以定义一个数组常量。
class foo { const KEYS = [1, 3, 6, 7]; } // echo foo::KEYS[0]; // 1