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
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Урок №19 - Немного о паттернах [5]
Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010 Откуда: Екатеринбург
Помог: 4 раз(а)
EuGen пишет:
Будет представление, которое обращается к переменной $rgPages
по моему я опять ухожу в лес дремучий, у меня получается в представлении весь код для обработки контента. К примеру, мне необходимо отобразить три колонки получается вот так вот.
(Добавление)
прибавить остальные поля из базы и html код то вообще получится как всегда соберушка (Добавление)
и еще могу я из представления layuot.php обратится к какаому либо контролеру для получения информации??? (Добавление)
Если использовать такой к примеру способ
Strict standards: Non-static method Controller_Index::test() should not be called statically, assuming $this from incompatible context in C:\xampp\htdocs\coding.dev\www\templates\main.php on line 28
А потом уже выполняется функция
EuGen
Отправлено: 09 Декабря, 2011 - 19:20:41
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
В представлении допустимо использовать построение логики вывода (в Вашем случае это вывод в три колонки). Ведь оно для того и представление, что содержит в себе способ вывода контента. Представление оперирует свойством $rgPages, полученном в контроллере, так что все стройно - логика отображения отделена от операций с данными.
Насчет layout предлагаю все же подумать.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
vlom
Отправлено: 09 Декабря, 2011 - 19:32:11
Частый посетитель
Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010 Откуда: Екатеринбург
Помог: 4 раз(а)
Допустим ли такой вариант как с использованием класса Config_Handler??? То есть добавить функцию в класс для создания объекта, но при этом получается что выскакивает ошибка о повторном старте сессии. В Controller_Base заменил session_start() на
(Добавление)
Вроде работает без выпендрежа пока)))
Panoptik
Отправлено: 09 Декабря, 2011 - 20:05:17
Постоянный участник
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
я вот просмотрел статью и у меня накопилось несколько вопросов.
1 простой: названия переменных всегда несут в себе какуюто суть. у вас я часто встречаю префикс "rg" - пока до сих пор не додумал что бы это могло означать
2: в чем проявляется реализация паттерна синглтон. насколько я понял логика такова, что у класса есть механизм защиты от создания второго экземпляра, только вот где именно это реализовано, пока не понял. предполагаю приблизительно вот в этом месте:
3: логика вывода. render рисует какой либо файл вида и вставляет в лейаут. вопрос: у вас здесь просто пока не реализована возможность добавления нескольких файлов вида, допустим отрендерить меню с одного файла и контент с другого? или после каждого вызова рендер идет кеширование содержимого, а после происходит вывод всего что накопилось. и если можно ткнуть пальцем в то место где это происходит
----- Just do it
Мелкий
Отправлено: 09 Декабря, 2011 - 20:17:28
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 617 раз(а)
Panoptik пишет:
1 простой: названия переменных всегда несут в себе какуюто суть. у вас я часто встречаю префикс "rg" - пока до сих пор не додумал что бы это могло означать
Массив, образовано от register, сам недавно спрашивал
Panoptik пишет:
2: в чем проявляется реализация паттерна синглтон. насколько я понял логика такова, что у класса есть механизм защиты от создания второго экземпляра, только вот где именно это реализовано, пока не понял. предполагаю приблизительно вот в этом месте:
Это - непосредственно метод получения единственного экземпляра. $rInstance - единое свойство для всех экземпляров класса, т.е. все экземпляры имеют одинаковое значение.
А конструктор (__construct) класса, метод клонирования (__clone) объявляются private - это как раз механизм защиты от создания нового экземпляра объекта.
----- PostgreSQL DBA
EuGen
Отправлено: 09 Декабря, 2011 - 20:19:34
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
1. Это не более чем моя система неймспейсинга. rg означает переменную-массив (от "register")
2. Это не защита, а реализация паттерна. В строгом смысле объект можно склонировать, создать новый и т.п. Предполагается что программист сам себе не враг и не будет использовать объект против его реализации. Но можно добавить и "защиту" - запретить конструктор, клонирование (сделать их приватными) и т.п.
3. Обертка (layout) в настоящее время одна. Так что предполагается, что при надобности можно модифицировать класс, отвечающий за представление.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Panoptik
Отправлено: 09 Декабря, 2011 - 20:40:36
Постоянный участник
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
на счет синглтона.
всё до боли уж абстрактно
если на небольшом примере
в реальном приложении у нас гдето встречается явное создание объекта класса синглтон?
вот вроде логику ООП понимаю, но видать не на столько.
свойство $rInstance статичное и в то же время протектед. если оно статичное, то его же нельзя вызвать через $this в классе наследнике?
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Так он и есть protected, не private - все верно. К статичному свойству можно обращаться через self.
Но в данном случае не очень понял про абстракцию. Есть экземпляр класса - возвращаемые в getInstance - и это вполне конкретный класс, вполне конкретный его экземпляр, который можно использовать. Здесь нет никакой абстракции.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Panoptik
Отправлено: 09 Декабря, 2011 - 21:03:14
Постоянный участник
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
сорри со словоблудие "абстрактно" я имел ввиду свое личное понимание, а не модификатор принятый в php
значит когда мы в наследниках вызовем Someclass::getInstance() мы получим экземпляр именно Someclass, который ранее был создан с помощью $Someclass = new Someclass;
я всё верно понял надеюсь
----- Just do it
EuGen
Отправлено: 09 Декабря, 2011 - 21:08:20
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Чтобы ответить на этот вопрос, посмотрите реализацию адаптера к БД. Там есть такое же наследование.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
vlom
Отправлено: 25 Декабря, 2011 - 17:45:53
Частый посетитель
Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010 Откуда: Екатеринбург
если переходить по ссылке news/1/3 в переменной $parametrs остается только лишь '1'
что не так в моем коде?? Да и вообще как-то коряво реализованна загрузка контроллеров если нет названия метода в ссылке, может подскажите как будет лучше такое осуществить. Просто есть старый проиндексированный сайт и ни как не желаю менять ссылки.
vlom
Отправлено: 28 Февраля, 2012 - 05:34:11
Частый посетитель
Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010 Откуда: Екатеринбург
Помог: 4 раз(а)
EuGen у вас в Controller_Base в методе конструктора стартуется сессия, в таком случае как показанно в примере она не будет каждый раз новая запускаться??? Вот так не правильнее будет
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.