title
Description
Body
Что то скучно на фаруме. Предлагаю вывести на обсуждение давно волнующую меня тему.
С этим вопросом начал сталкиваться с начала освоение ООП в PHP.
Есть определенный тип данных генерация которых занимает продолжительное время (База данных, чтение и запись файлов, получение данных с удаленного сервера и т.п.)
Задача такова при генерации данного объекта запретить его повторную генерацию этого самого объекта с целью оптимизации кода.
Есть вариант закрыть конструктор и сделать статический метод вызывающий внутри конструктор и возвращающий ссылку на объект: (Этот вариант отлично подходит в стого-типизированом языке)
|
|
Вроде архитектура данного обьекта и хорошая но есть один минус при оперировании с данными объекта, IDE не понимает что возвращает A::newObject($id) и не работает авто-завершение что сказывается на количестве багов и продуктивности написания кода.
тут приходить костыльная мысля делать это все в обычном конструкторе и в static::$list[$this->_id] писать $this и при повторном конструировании объекта с таким же ид будет происходить заполнение данных ссылками со статического списка.
|
|
У меня еще есть надежда что можно как то иде научить определять тип переменной и юзать приватный конструктор
Неактивен
Gemorroj написал:
Там явно напрашивается синглтон
Ну синглтон как правило используеться для одиночной инициалицазии класса. У меня же обьектовм может быть множетство но основная задача что бы в памяти небыло два одинаковых обьекта
Неактивен
а, не совсем правильно понял. ну почти то же самое. в новомодной терминологии это называется мультитон. и реализуется практически так же как у тебя в первом примере. за исключением того, что не понятно зачем там ссылочный метод и static.
я бы переписал так:
|
|
Неактивен
Gemorroj написал:
за исключением того, что не понятно зачем там ссылочный метод и static.
а какая разница static::$listObject[$id] или self::$listObject[$id]? сейчас пересмотрю на self
Неактивен
Неактивен
Gemorroj написал:
Что то там ничего не понял. Но тесты показывают следующее
Я так понял:
parent - обращаемся к методу/свойству через класс родителя
self - обращается методу через класс в котором был определен данный метод
static - обращаемся к методу через текущий класс
Добавлено спустя 5 минут 8 секунд:
Учитывая что я использую наследования получается что все же static будет целесообразнее использовать в данном случаее. В противном случае не важно будет self или static
|
|
На выходе
Неактивен
Gemorroj написал:
не понятно зачем там ссылочный метод
Ты прав я что то вообще запамятовал. Объекты же и есть ссылочный тип. передавал я не сам объект а ссылку на ячейку массива.
|
|
Неактивен