массивы php const

Это единственный способ иметь массивы как константы в php или это плохой код:

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

Ваш код в порядке: массивы не могут быть объявлены постоянными в PHP до версии 5.6, поэтому статический подход, вероятно, лучший способ. Вы должны подумать о том, чтобы пометить эту переменную как константу с помощью комментария:

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

С PHP 5.6.0 или новее вы можете объявить массивы постоянными:

 const myArray = array(...); 

Начиная с PHP 5.6.0 (28 августа 2014 года), можно определить константу массива (см. Новые возможности PHP 5.6.0 ).

 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 (03 Dec 2015) константы массива могут быть определены с помощью define (). В PHP 5.6 они могут быть определены только с помощью const. (См. Новые возможности PHP 7.0.0 )

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

Я наткнулся на эту тему, ища ответ сам. Подумав, я должен был бы передать свой массив через каждую функцию, в которой он был нужен. Мой опыт работы с массивами и mysql заставлял меня задаться вопросом, будет ли работать сериализация. Конечно.

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

Пометить его статичным является хорошей альтернативой. Вот пример инкапсуляции статического массива, чтобы получить некоторое постоянное поведение.

 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) } 

Я предлагаю использовать следующее:

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

Таким образом, у вас есть массив const, и вам гарантировано, что никто не сможет его изменить, даже метод в самом классе.

Возможная микро-оптимизация (не уверен, сколько компиляторов PHP оптимизируется в наши дни):

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

Вы создали статический массив, а не постоянный массив. Статические переменные изменяемы; константы неизменяемы. Ваш код неплохой, но он не делает того, что вы намереваетесь сделать.

В PHP 5.6 вы можете объявить const массивы. Пожалуйста, ознакомьтесь с моим предыдущим объяснением .

Возможно, вам нужно что-то вроде этого:

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

Обратите внимание, что константы не имеют префикса $ , что указывает на их неизменность. $foo – переменная; FOO нет. Кроме того, постоянные имена всегда капитализируются, по крайней мере, на языках программирования, которым я подвергался. Это не выполняется компилятором; это просто (почти?) универсальный стиль кодирования. Ключевые слова видимости public , protected и private не применяются к константам. Наконец, static могут применяться или могут применяться в зависимости от того, хотите ли вы, чтобы функция была static .

Начиная с PHP 5.6, можно определить константу как скалярное выражение, а также определить константу массива.

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