Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Доступ к массивам в статическом классе
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Доступ к массивам в статическом классе

Страниц (1): [1]
 

1. Crate - 03 Мая, 2013 - 14:53:16 - перейти к сообщению
Есть такой класс:
PHP:
скопировать код в буфер обмена
  1. class Registry {
  2.         public static $data = array();
  3.  
  4.         public static function set ($key, $value) {
  5.                 static::$data[$key] = $value;
  6.         }
  7.  
  8.         public static function get ($key) {
  9.                 if (static::$data[$key]) {return static::$data[$key];}
  10.         }
  11.  
  12.         public static function has ($key) {
  13.                 return isset (static::$data[$key]);
  14.         }
  15. }
  16. Registry::set('config', array('key' => 'value'));

Как получить доступ, к Registry::get('config')['key']?
2. LIME - 03 Мая, 2013 - 14:57:47 - перейти к сообщению
если это вложенный массив то в 5.4 так и получить
<5.4
PHP:
скопировать код в буфер обмена
  1. $arr=Registry::get('config');
  2. $arr['key'];

(Добавление)
или напрямую
PHP:
скопировать код в буфер обмена
  1. Registry::$data['config']['key'];
3. Crate - 03 Мая, 2013 - 14:59:39 - перейти к сообщению
LIME, а что, если использовать Registry::get('config') напрямую, без дополнительных переменных?
(Добавление)
Ой, не увидел.
(Добавление)
А что, если $data приватная? И можно только через метод.
4. LIME - 03 Мая, 2013 - 15:03:50 - перейти к сообщению
ф-ция возвращает элемент массива $data по ключу config
если это в свою очередь массив то разыменовать его на месте можно только в 5.4
есть вариант принимать в get более 1го параметра
тогда можно гулять вглубь массива по ключам
(Добавление)
еще можно хранить в массиве data не скаляры а объекты класса Registry
тогда data не должна быть статической но можно
PHP:
скопировать код в буфер обмена
  1. $registry=new Registry;
  2. $registry->get('config')->get('key');

(Добавление)
но исходя из того что это конфиг и он должен быть виден везде ...разбери его в цикле в константы и все
5. _Dark_ - 04 Мая, 2013 - 13:44:58 - перейти к сообщению
Почему static вместо self?
6. esterio - 04 Мая, 2013 - 16:33:01 - перейти к сообщению
Почитайте про позднее статическое связивание
7. LIME - 04 Мая, 2013 - 17:48:22 - перейти к сообщению
http://php.net/manual/ru/languag....oop5.static.php
8. _Dark_ - 05 Мая, 2013 - 09:03:41 - перейти к сообщению
Это понятно, но в коде выше я не вижу статического связывания.
9. OrmaJever - 05 Мая, 2013 - 09:33:47 - перейти к сообщению
_Dark_ Ну наверное человек не будет выкладывать 100500 класов своего проэта только что бы спросить как обращатся к масиву? Растерялся
10. _Dark_ - 07 Мая, 2013 - 14:50:03 - перейти к сообщению
Так ведь переменная data объявлена в этом же классе.
11. LIME - 07 Мая, 2013 - 14:57:05 - перейти к сообщению
а если у наследников в ней другое значение?
ты хоть прочитал по ссылке?
12. _Dark_ - 07 Мая, 2013 - 17:11:27 - перейти к сообщению
Я знаю, что такое статическое связывание.

И я не думаю, что имеет смысл наследовать реестр.

В общем, тема исчерпана.

 

Powered by ExBB FM 1.0 RC1