За последние 24 часа нас посетили 21692 программиста и 1067 роботов. Сейчас ищут 634 программиста ...

Оцените класс для работы с INI файлами

Тема в разделе "Прочие вопросы по PHP", создана пользователем geone, 4 окт 2015.

  1. geone

    geone Новичок

    С нами с:
    4 окт 2015
    Сообщения:
    139
    Симпатии:
    0
    Ну как бы замена $GLOBALS. Для передачи и получения информации между отдельными модулями системы.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    нет никакой замены. есть синглтон и статика - правильные подходы.
     
  3. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.632
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    igordata, ты не понял о че он.
     
  4. geone

    geone Новичок

    С нами с:
    4 окт 2015
    Сообщения:
    139
    Симпатии:
    0
    Я не про это.

    Мне интересно, можно ли со статикой вот так, к примеру:
    Код (PHP):
    1. $registry = Registry::GetInstance();
    2. $registry['Мой ключ'] = 'Моё значение';
    3. echo $registry['Мой ключ'];
    4.  
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    в смысле если ты поменял,то оно поменялось?
    Код (PHP):
    1. $registry = Registry::GetInstance();
    2. $registry['Мой ключ'] = 'Моё значение';
    3.  
    4. ...
    5. $registry = Registry::GetInstance();
    6. echo $registry['Мой ключ']; //  'Моё значение';
    7.  
    так?
     
  6. geone

    geone Новичок

    С нами с:
    4 окт 2015
    Сообщения:
    139
    Симпатии:
    0
    Я не понял вопроса и зачем писать $registry = Registry::GetInstance(); 2 раза? Функция Registry::GetInstance() создаёт экземпляр класса если его нет, а если есть то возвращает уже созданный. Без разницы скольты напишешь $registry = Registry::GetInstance(); экземпляр класса будет один. Даже если ты так сделаешь:
    Код (PHP):
    1. $registry = Registry::GetInstance();
    2. $registry['Мой ключ'] = 'Моё значение';
    3.  
    4. ...
    5. $registry2 = Registry::GetInstance();
    6. echo $registry2['Мой ключ']; //  'Моё значение';  
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    блин, я думаю тебе надо больше практики. Может ты имеешь в виду такое решение тупо:

    Код (PHP):
    1. class Reg {
    2.   public static $arr = ['a' => 'a', 'b' => 'b'];
    3. }
    4.  
    5. $arr1 = Reg::$arr;
    6. $arr1['a'] = 'c';
    7.  
    8. var_dump(Reg::$arr);
    9.  
    10. $arr2 = &Reg::$arr;
    11. $arr2['a'] = 'c';
    12. var_dump(Reg::$arr);
    13.  
    14. // или просто
    15. Reg::$arr['a'] = 'x';
    16. var_dump(Reg::$arr);
    17.  
    Добавлено спустя 1 минуту:
    просто ты работаешь с копией, и эхо делаешь значения из копии. В случае если это будет не массив, а объект, скорее всего будет оригинал. Но в примере у тебя массив, и изменения не сохранятся в глобальном классе.
     
  8. geone

    geone Новичок

    С нами с:
    4 окт 2015
    Сообщения:
    139
    Симпатии:
    0
    Это не помешало бы.
    А можно и так сделать, это даже в голову не приходило. Зачем заворачиваться с синглтоном с функциями добавления удаления и доступу как к массиву?
     
  9. geone

    geone Новичок

    С нами с:
    4 окт 2015
    Сообщения:
    139
    Симпатии:
    0
    Уже нет я сделал private static $vars = array();

    Как это, а зачем нужно Implements ArrayAccess? Implements ArrayAccess Нужен как раз таки что бы изменения сохранялись.

    Я тут подумал, а может ты прав, сделал тест:
    Это registry.class.php с добавлением var_dump(__METHOD__); в методы.
    Код (PHP):
    1. <?php
    2. // Класс хранилища
    3. Class Registry Implements ArrayAccess {
    4.     
    5.     protected static $_instance; // Здесь экземпляр класса
    6.     private static $vars = array(); // Само хранилище
    7.     
    8.     private function __construct(){}
    9.     private function __clone(){}
    10.     
    11.     public static function GetInstance() {
    12.         // Проверяем актуальность экземпляра
    13.         if (null === self::$_instance) {
    14.             // Создаем новый экземпляр
    15.             self::$_instance = new self();
    16.         }
    17.         // В созданный или существующий экземпляр
    18.         return self::$_instance;
    19.     }
    20.         
    21.     // Запись данных
    22.     function Set($key, $var) {
    23.         static::$vars[$key] = $var;
    24.         return true;
    25.     }
    26.  
    27.     // Получение данных
    28.     function Get($key) {
    29.         if (isset(static::$vars[$key]) == false) {
    30.             return null;
    31.         }
    32.         return static::$vars[$key];
    33.     }
    34.  
    35.     // Удаление данных
    36.     function Remove($var) {
    37.         unset(static::$vars[$key]);
    38.     }
    39.     
    40.     // Для обращения к обьекту как к массиву
    41.     function offsetExists($offset) {
    42.         var_dump(__METHOD__);
    43.         echo "<br>";
    44.         return isset(static::$vars[$offset]);
    45.     }
    46.     function offsetGet($offset) {
    47.         var_dump(__METHOD__);
    48.         echo "<br>";
    49.         return $this->get($offset);
    50.     }
    51.     function offsetSet($offset, $value) {
    52.         var_dump(__METHOD__);
    53.         echo "<br>";
    54.         $this->set($offset, $value);
    55.     }
    56.     function offsetUnset($offset) {
    57.         var_dump(__METHOD__);
    58.         echo "<br>";
    59.         unset(static::$vars[$offset]);
    60.     }
    61. }
    Это сам тест:
    Код (PHP):
    1. include('registry.class.php');
    2. $registry1 = Registry::GetInstance();
    3. $registry1["foobar"] = "foobar";
    4. echo "<br>";
    5.  
    6. $registry2 = Registry::GetInstance();
    7. // Я "foobar" не добавлял в $registry2
    8. echo $registry2["foobar"];
    9. echo "<br>";
    10.  
    11. $registry2["df"] = "Работает";
    12.  
    13. // Я "df" добавлял в $registry2
    14. echo $registry1["df"];
    15. echo "<br>";
    Результат:
    string(19) "Registry::eek:ffsetSet"
    string(19) "Registry::eek:ffsetGet"
    foobar
    string(19) "Registry::eek:ffsetSet"
    string(19) "Registry::eek:ffsetGet"
    Работает
    Я цвета добавил для наглядности.

    Вот теперь работает как должно быть)))

    Добавлено спустя 4 минуты 46 секунд:
    Как видно выше когда делаешь $registry2["df"] = "Работает", работает метод Registry::eek:ffsetSet. И экземпляр класса один.
     
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Если синглтон, то тут можно обычное поле, не статическое. Он всё равно создастся только один
     
  11. geone

    geone Новичок

    С нами с:
    4 окт 2015
    Сообщения:
    139
    Симпатии:
    0
    Это igordata запутал меня))) Оно обычным и было, хотя какая разница.
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    А, я не видел что ты массивность заимплементил. Это вообще редко где используется именно так. Можно же тупо через паблик массив. На крайняк делают через магические методы.

    Вообще, лучше стараться не городить такой огород.
     
  13. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Так есть же \ArrayObject, зачем делать свою реализацию?

    Автор, прочитай таки про внедрение зависимостей, сервис-контейнеры и вообще, слабую связанность.
     
  14. geone

    geone Новичок

    С нами с:
    4 окт 2015
    Сообщения:
    139
    Симпатии:
    0
    Как нибудь на днях.
    Что ты хочешь? Я только неделю назад разобрался что такое ООП)))

    Добавлено спустя 27 секунд:
    А это как?

    Добавлено спустя 1 минуту 37 секунд:
    Ну захотелось поэкспериментировать, полезно для общего развития)))
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
  16. geone

    geone Новичок

    С нами с:
    4 окт 2015
    Сообщения:
    139
    Симпатии:
    0
    Ещё __unset()

    Добавлено спустя 37 секунд:
    Надо как нибудь попробовать
     
  17. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Ещё _isset();__call();__callStatic(); =)
     
  18. geone

    geone Новичок

    С нами с:
    4 окт 2015
    Сообщения:
    139
    Симпатии:
    0
    Зачем?
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Читай :D

    Добавлено спустя 1 минуту 42 секунды:
    Учи инглиш. Читай доки, читай статьи. Будь на острие прогресса.

    Вот тут я почерпнул кучу важной инфы. http://blog.ircmaxell.com
     
  20. geone

    geone Новичок

    С нами с:
    4 окт 2015
    Сообщения:
    139
    Симпатии:
    0
    Я на стороне всемирной глобализации, абсолютной русификации (Индейцев в том числе).

    Ладно шучу [​IMG]
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Делай на собой усилия короче. Школа кончилась. Никто больше не будет тебя заставлять учится. Сам выбираешь, сам читаешь, осваиваешь. Пиши в скайп если че igordata
     
  22. geone

    geone Новичок

    С нами с:
    4 окт 2015
    Сообщения:
    139
    Симпатии:
    0
    Не гони я в 10 классе

    Добавлено спустя 32 секунды:
    Я скайпом не пользуюсь, трафик берегу
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    В 10м уже готовятся сами к инсту тоже :D

    Добавлено спустя 2 минуты 31 секунду:
    А тут на форуме трафик меньше чем в скайпе? :-o
     
  24. geone

    geone Новичок

    С нами с:
    4 окт 2015
    Сообщения:
    139
    Симпатии:
    0
    Ага с лет 11, просто нравиться этим заниматься.
    Фурум на комп не надо скачивать [​IMG]
     
  25. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    У тебя там адский трафик прям случится. :D как же ты живешь? На тебе смерть трафику http://beeg.com