Я не про это. Мне интересно, можно ли со статикой вот так, к примеру: Код (PHP): $registry = Registry::GetInstance(); $registry['Мой ключ'] = 'Моё значение'; echo $registry['Мой ключ'];
в смысле если ты поменял,то оно поменялось? Код (PHP): $registry = Registry::GetInstance(); $registry['Мой ключ'] = 'Моё значение'; ... $registry = Registry::GetInstance(); echo $registry['Мой ключ']; // 'Моё значение'; так?
Я не понял вопроса и зачем писать $registry = Registry::GetInstance(); 2 раза? Функция Registry::GetInstance() создаёт экземпляр класса если его нет, а если есть то возвращает уже созданный. Без разницы скольты напишешь $registry = Registry::GetInstance(); экземпляр класса будет один. Даже если ты так сделаешь: Код (PHP): $registry = Registry::GetInstance(); $registry['Мой ключ'] = 'Моё значение'; ... $registry2 = Registry::GetInstance(); echo $registry2['Мой ключ']; // 'Моё значение';
блин, я думаю тебе надо больше практики. Может ты имеешь в виду такое решение тупо: Код (PHP): class Reg { public static $arr = ['a' => 'a', 'b' => 'b']; } $arr1 = Reg::$arr; $arr1['a'] = 'c'; var_dump(Reg::$arr); $arr2 = &Reg::$arr; $arr2['a'] = 'c'; var_dump(Reg::$arr); // или просто Reg::$arr['a'] = 'x'; var_dump(Reg::$arr); Добавлено спустя 1 минуту: просто ты работаешь с копией, и эхо делаешь значения из копии. В случае если это будет не массив, а объект, скорее всего будет оригинал. Но в примере у тебя массив, и изменения не сохранятся в глобальном классе.
Это не помешало бы. А можно и так сделать, это даже в голову не приходило. Зачем заворачиваться с синглтоном с функциями добавления удаления и доступу как к массиву?
Уже нет я сделал private static $vars = array(); Как это, а зачем нужно Implements ArrayAccess? Implements ArrayAccess Нужен как раз таки что бы изменения сохранялись. Я тут подумал, а может ты прав, сделал тест: Это registry.class.php с добавлением var_dump(__METHOD__); в методы. Код (PHP): <?php // Класс хранилища Class Registry Implements ArrayAccess { protected static $_instance; // Здесь экземпляр класса private static $vars = array(); // Само хранилище private function __construct(){} private function __clone(){} public static function GetInstance() { // Проверяем актуальность экземпляра if (null === self::$_instance) { // Создаем новый экземпляр self::$_instance = new self(); } // В созданный или существующий экземпляр return self::$_instance; } // Запись данных function Set($key, $var) { static::$vars[$key] = $var; return true; } // Получение данных function Get($key) { if (isset(static::$vars[$key]) == false) { return null; } return static::$vars[$key]; } // Удаление данных function Remove($var) { unset(static::$vars[$key]); } // Для обращения к обьекту как к массиву function offsetExists($offset) { var_dump(__METHOD__); echo "<br>"; return isset(static::$vars[$offset]); } function offsetGet($offset) { var_dump(__METHOD__); echo "<br>"; return $this->get($offset); } function offsetSet($offset, $value) { var_dump(__METHOD__); echo "<br>"; $this->set($offset, $value); } function offsetUnset($offset) { var_dump(__METHOD__); echo "<br>"; unset(static::$vars[$offset]); } } Это сам тест: Код (PHP): include('registry.class.php'); $registry1 = Registry::GetInstance(); $registry1["foobar"] = "foobar"; echo "<br>"; $registry2 = Registry::GetInstance(); // Я "foobar" не добавлял в $registry2 echo $registry2["foobar"]; echo "<br>"; $registry2["df"] = "Работает"; // Я "df" добавлял в $registry2 echo $registry1["df"]; echo "<br>"; Результат: string(19) "Registry:ffsetSet" string(19) "Registry:ffsetGet" foobar string(19) "Registry:ffsetSet" string(19) "Registry:ffsetGet" Работает Я цвета добавил для наглядности. Вот теперь работает как должно быть))) Добавлено спустя 4 минуты 46 секунд: Как видно выше когда делаешь $registry2["df"] = "Работает", работает метод Registry:ffsetSet. И экземпляр класса один.
А, я не видел что ты массивность заимплементил. Это вообще редко где используется именно так. Можно же тупо через паблик массив. На крайняк делают через магические методы. Вообще, лучше стараться не городить такой огород.
Так есть же \ArrayObject, зачем делать свою реализацию? Автор, прочитай таки про внедрение зависимостей, сервис-контейнеры и вообще, слабую связанность.
Как нибудь на днях. Что ты хочешь? Я только неделю назад разобрался что такое ООП))) Добавлено спустя 27 секунд: А это как? Добавлено спустя 1 минуту 37 секунд: Ну захотелось поэкспериментировать, полезно для общего развития)))
Читай Добавлено спустя 1 минуту 42 секунды: Учи инглиш. Читай доки, читай статьи. Будь на острие прогресса. Вот тут я почерпнул кучу важной инфы. http://blog.ircmaxell.com
Делай на собой усилия короче. Школа кончилась. Никто больше не будет тебя заставлять учится. Сам выбираешь, сам читаешь, осваиваешь. Пиши в скайп если че igordata
В 10м уже готовятся сами к инсту тоже Добавлено спустя 2 минуты 31 секунду: А тут на форуме трафик меньше чем в скайпе? :-o