2013-11-13 3 views
0

Вместо того, чтобы перейти к базе данных, для чего была бы очень маленькая таблица, например, 3 столбца и 3 строки. Я хочу поместить эту информацию в массив или объект JSON и включить его в заголовочный файл приложений. Эта информация используется достаточно часто, чтобы гарантировать ее включение на каждую страницу.PHP массив для всего приложения

Так что кажется, что я не могу сохранить массив как константу, поэтому лучший способ получить доступ к массиву в любой момент, желательно без дальнейшей обработки. Было бы неплохо сохранить его как объект JSON, поскольку информация будет использоваться как с Javascript, так и с PHP.

+0

Вы имеете в виду, что у вас есть массив постоянных данных? – altsyset

+0

Да данные не изменятся – user1209203

+0

Отрицательных голосов от троллея лол – user1209203

ответ

2

Если вы хотите что-то, что нельзя изменить, попробуйте это. Вам просто нужно загрузить класс, прежде чем вы сможете использовать его в процессе начальной загрузки приложений или где бы вы загружали свой класс или не регистрировали его в своем загрузчике классов.

final class SomeData { 
    private static $data = array(
     1 => array(
      1 => '1st row 1st column', 
      2 => '1st row 2nd column', 
      3 => '1st row 3rd column' 
     ), 
     2 => array(
      1 => '2nd row 1st column', 
      2 => '2nd row 2nd column', 
      3 => '2nd row 3rd column' 
     ), 
     3 => array(
      1 => '3rd row 1st column', 
      2 => '3rd row 2nd column', 
      3 => '3rd row 3rd column' 
     ) 
    ); 
    public static function getData() { 
     return self::$data; 
    } 
} 

print_r(SomeData::getData()); 

Если вы хотите получить доступ к объекту данных как массив можно просто реализовать ArrayAccess. Объект не может быть изменен, поскольку он является окончательным, а свойство частным.

+0

Это хорошо работает, нет ли способа доступа к массиву без использования функции? – user1209203

+0

Нет, вы не можете его изменить. – burzum

+0

@burzum - ну, вы можете * изменить его, если вы использовали 'Reflection', но не в обычном использовании. В любом случае, это так близко, как вы собираетесь добраться до постоянного массива. – Spudley

0

Массив будет полезен, если информация не нуждается в изменении, так как для его изменения потребуется вручную отредактировать исходный код.

Вы можете хранить информацию в файле .json и на каждой сессии загружать значения в массив.

Чтобы быть честным, было бы лучше пойти с SQLite или аналогичным. Даже MySQL был бы уместным, не говоря уже о том, что это экономит много хлопот по треку, если данные необходимо изменить.

+0

Я не знаю, почему было бы легче отследить, есть ли конкретный файл для такого рода данных. – user1209203

+0

Я заметил в другом комментарии, что вы сказали, что данные не будут меняться, в этом случае было бы прекрасно использовать массивы для хранения информации. – mulquin

+0

Но какой метод, константа не работает для массива, а переменная уязвима для изменения. – user1209203

0

Итак, сохраните его как массив в $ _SESSION. И он будет доступен в любое время.

Этот код будет в вашем заголовке:

session_start(); 

$_SESSION['my_small_data'] = array(
    1 => array(
    1 => '1st row 1st column', 
    2 => '1st row 2nd column', 
    3 => '1st row 3rd column' 
), 
    2 => array(
    1 => '2nd row 1st column', 
    2 => '2nd row 2nd column', 
    3 => '2nd row 3rd column' 
), 
    3 => array(
    1 => '3rd row 1st column', 
    2 => '3rd row 2nd column', 
    3 => '3rd row 3rd column' 
) 
); 

И везде в вашем коде вы можете получить доступ к F.E. второй ряд третьей колонке с этим кодом:

$data = $_SESSION['my_small_data'][2][3]; 
+0

Я не уверен, почему это лучше, чем хранение в качестве переменной, так же открыто, что меняются непреднамеренно. – user1209203

+0

Но вы хотите, чтобы он был доступен везде, так и в других файлах PHP в вашем проекте; и я предполагаю, что вы не используете глобальные переменные ... Кроме того, если вы используете OOP, вам нужно будет иметь доступ к ним в ваших классах ... Итак, использование '$ _SESSION' - ваш лучший выбор. – Legionar

+0

Если он доступен через заголовок в переменной или помещен в переменную сеанса, это не имеет никакого значения. Он должен быть постоянным, чтобы не перезаписываться. – user1209203

Смежные вопросы