Сериализация и особенно десериализация довольно неудобны.(С другой стороны, не совсем понятно, почему язык сценариев не может иметь массивы в качестве констант ...)
Но это действительно зависит от модели использования.Обычно вы хотите глобальные определения для хранения настроек конфигурации.И глобальные переменные и константы являются подходящим использованием для этого (несмотря на то, что «глобальные перемены - зло! 1!»).Но желательно все бросить в какой-нибудь объект или массив реестра, по крайней мере:
class config {
var $MY_ARRAY = array("key1"=>...);
var $data_dir = "/tmp/";
}
Это дает простейший синтаксис доступа с config::$MY_ARRAY
.Это не совсем константа, но вы можете легко подделать это.Просто используйте ArrayObject или ArrayAccess и реализуйте его так, чтобы сделать атрибуты доступными только для чтения.(Заставьте offsetSet выдать ошибку.)
Если вы хотите обойти постоянное значение глобального массива, тогда есть другая альтернатива (я украл эту идею со страницы руководства define ) означает использование функции вместо константы:
function MY_ARRAY() {
return array("key1" => $value1,);
}
Доступ снова не совсем постоянный, но MY_ARRAY()
достаточно короткий.Хотя хороший доступ к массиву с MY_ARRAY()["key1"]
невозможен до PHP 5.3;но опять же это может быть подделано, например, с помощью MY_ARRAY("key1")
.