ООП: использование экземпляра класса в другом классе. Улучшаем собственную производительность с использованием вспомогательных функций PHP Пример использования PHP блоков

Kernel::getInstance(); // Согласно Singleton

Вот скажите, с какогу перепугу Вы сами послезавтра или кто-то другой с отличной от Вашей логикой, может догадаться что в результате Kernel::getInstance() будет сформирована страница? Где тут это написано? Вместо легко понятного ну хотя бы

Kernel::getInstance()->showMeThePage();

Вы будете долго рыться в коде или писать, а затем читать килограмы документации по проекту... Но это так, присказка.

Почему
Потому что конструкция Ваших объектов не подразумевает никакой модификации состояния объекта после его конструкции. Вы жестко ограничили варианты использования объекта исключительно через конструктор. И, да, если завтра Вам понадобится добавить помимо $db еще какой-то объект, Вы будете долго и нудно переписывать аргументы всех зависимых методов.

Ваши классы должны быть спроектированны таким образом, что бы пользователь класса имел возможность ПОЛНОСТЬ влиять на поведение экземпляра. У Вас все с точностью до наоброт. Вы предусмотрели только один вариант использования класса - результат, который будет получен после отработки конструктора. То есть Вы даже не сможете повторно получить тот же самый результат без повторной конструкции экземпляра.

Если бы у Вас было хотя бы так

// Здесь мы просто указываем конкретные объекты $k = Kernel(new MySpecificDb($config),new MyOtherSpecific()); // и мы можем в любое время сделать все что угодно и с этими // объектами и с ядром, изменив его поведение путем // подмены этих объектов $myDb = $k->getDatabase(); $k->setDatabase(new LogQueries($myDb)); // другой код инициализации // После всего этого мы заставляем ядро выполнить свою задачу $k->runPage();

PS. А адаптор используется именно для адаптации одного интерфейса под другой. Я сначала не понял в чем проблема с аргументами.

-~{}~ 13.05.08 14:07:

В догонку

Есть класс Config, его методы (первоначальная загрузка параметров конфигурации из БД, получение значение конфигурационного параметра по ключу) используются в других методах других классов многократно (Kernel, Module).

Может быть единственный экземпляр класса Config используется многократно? Это разные вещи:

1. я создал 50 экземпляров класса Config, методы каждого из которых вызывались по 1 разу - я 50 раз использовал тип Config.

2. я создал 1 экземпляр класса Config, методы которого вызывались 50 раз - я 1 раз использовал тип Config.

Какая разница, сколько раз Вы сложите два числа, если практическая ценность типа число в программе от этого не меняется? Насколько выше ценность типа число в программе, которая использует 500 различных числовых значений, то есть использует тип число 500 раз?

Безграмотные

Юридический термин, означающий лиц, не умеющих ни читать, ни писать ни на каком языке. В иностранных законодательствах лица эти носят название "аналфавитов" (Analphabeten, Analphabets). Безграмотность, являясь недостатком, не дозволяющим самостоятельно понимать содержание письменных актов, а также скреплять их собственноручной подписью, как это требуется законом, заставляет гражданское законодательство, с одной стороны, ограничивать дееспособность этих лиц, с другой же - дать им возможность участвовать в гражданской деятельности, пополняя этот недостаток содействием посторонних лиц. По нашему законодательству ограничение дееспособности лиц безграмотных заключается в том, что лица эти не могут быть принимаемы на службу гражданскую, не могут быть нотариусами, маклерами, поверенными в общих судебных установлениях и свидетелями при совершении гражданских актов (Св. Зак. т. III; Уст. о службе по опред. правит., ст. 11; т. X, ч. 1, прилож. к ст. 708 п. 96; Уст. гражд. судопр., ст. 246, п. 1; Полож. о нотар. части, ст. 86). Стремление же нашего законодательства допустить безграмотных к гражданской деятельности и оградить их от вредных последствий, могущих произойти от их незнания, высказывается в постановлениях, определяющих способ совершения актов от имени таких лиц. Постановления эти сводятся к следующему: 1) акты всякого рода могут быть вместо неграмотных подписаны теми, кому они верят, т. е. дают поручение подписать за себя, при этом самое действие подписания грамотного за безграмотного должно происходить в присутствии последнего; поручение же или доверенность на рукоприкладство должно быть дано поверенному лично, причем это может быть сделано или путем словесной просьбы, или подачею руки, откуда и выражение - "по рукоданной просьбе" такой-то подписал за такого-то. При этом, разумеется, возможны злоупотребления, так как нет документального ручательства в том, что словесное или выраженное символически поручение было действительно дано лицом, от имени которого составлен акт; точно так же возможны злоупотребления в том случае, когда в силу весьма распространенного обычая безграмотный вместо своей подписи собственноручно ставит на акте кресты или "прикладывает руку", т. е. ладонь, покрытую чернилами, откуда выражение "рукоприкладство", и 2) ввиду этой возможности злоупотреблений при подписании актов грамотными за безграмотных все обязательственные акты о займе и приобретении имений и договоры, совершаемые от имени лиц неграмотных, в том числе и выдаваемые последними векселя, должны быть представляемы общественной власти для засвидетельствования сделанной за безграмотного подписи, притом, если последняя сделана на таком акте, при совершении которого по закону требуется присутствие свидетелей, факт подписания за безграмотного должен быть оговорен ими. Подпись, сделанная за безграмотного, должна быть засвидетельствована общественной властью, а не частными лицами, так как допущение свидетельства посторонних лиц противоречило бы общему правилу нашего законодательства, не допускающему свидетельских показаний в подтверждение существования долга. Засвидетельствование подписи грамотного за безграмотного в тех местах, где введено нотариальное положение (см. это сл.), совершается нотариусом одновременно с явкой (см. это сл.) ему акта; в тех же местах, где нотариальное положение не введено, это засвидетельствование производится местной полицией прежде представления акта к явке. Лицо, подписывающее домашнее завещание (см. это сл.) вместо безграмотного завещателя по его просьбе, должно иметь все те же качества, какие требуются для имоверного свидетеля при завещании (см. это сл.); притом в подписи его должно быть означено, за неумением ли завещателя или за болезнью учинена им та подпись (Св. Зак. т. Х, ч. 1 ст. , , , 2111, 2322, прилож. к ст. 708, п. 73, 112 и 119; Полож. о нотар. части, ст. 113).

В иностранных законодательствах правила, касающиеся аналфавитов, заключаются в том, что если лица эти желают изложить свои тестаментарные (завещательные) распоряжения на письме, то они должны диктовать свою последнюю волю другому и, так как написанное не может быть ими собственноручно подписано, то сверх тех свидетелей, присутствие коих требуется законом при подобных завещаниях, приглашается еще одно лицо для подписания завещания за неграмотного завещателя. Лицо это по французскому законодательству является в качестве настоящего свидетеля, по германскому же праву оно не имеет этого значения, а призывается лишь для того, чтобы обозначить своей подписью, что последняя сделана от имени такого-то аналфавита и по его желанию. По прусскому праву безграмотные наравне со слепыми вправе делать словесные завещания со внесением их в протокол суда; этот протокол подписывается за аналфавита двумя лицами, имеющими все качества тестаментарных свидетелей. Сделки и договоры, заключаемые аналфавитами, обязательно подлежат явке (см. это сл.). Под понятие безграмотности можно некоторым образом подвести и незнание языка страны, в которой совершается акт. Наше законодательство предусматривает случаи совершения актов при участии лиц, не знающих русского языка или не умеющих писать по-русски. Сюда относятся следующие положения: 1) не знающий русского языка или не умеющий писать по-русски может сделать подпись и на ином языке, но в таком случае подпись эта должна быть переведена на русский язык с удостоверением перевода и 2) не знающие русского языка не могут быть свидетелями при совершении нотариальных актов под опасением лишения акта силы (Полож. о нотар. части, ст. 70 и 87).


В этой статье поговорим о PHP блоках .

Начинающим web-мастерам и разработчикам возможно не знакомо это понятие. Рекомендую им прочесть эту статью, после чего взять на вооружение и применять при первой же возможности.

Это без преувеличения незаменимый инструмент, использующийся многими разработчиками.

Немного о PHP блоках

Использование PHP блоков значительно облегчает работу при создании, обновлении и оптимизации сайта.

Применение PHP блоков легко освоить. Даже если Вы создаете сайт исключительно на HTML и CSS и еще не знакомы с языком PHP , Вы все равно можете использовать .

PHP блок - это файл с расширением *.php , содержащий в себе фрагмент html -кода.
Этот php -файл при помощи конструкции include вставляется в нужном Вам месте страницы, размещая таким образом в этом месте, заключенный в него html -код.

Обязательным условием применения PHP блоков является расширение *.php у тех файлов, с которыми будет проводиться работа. То есть в файл с расширением *.html Вы не сможете вставить PHP блок .

Поэтому если Вы до сих пор редактировали html -файлы, то Вам необходимо их расширение *.html поменять на расширение *.php . Для тех, кто еще не знаком с PHP , стоит заметить, что ничего страшного в этом нет, так как смена расширения файла с *.html на *.php никаких изменений в работу с html -кодом не вносит.

Пример использования PHP блоков

У любого сайта есть элементы, которые не меняются при переходе от страницы к странице. Это такие элементы как шапка и футер сайта, вертикальное или горизонтальное меню навигации, возможно рекламный блок и т.п.

Теперь представьте, что Ваш сайт состоит из 10 страниц, и Вы решили отредактировать меню навигации: изменить его оформление или добавить/удалить пару ссылок.

В том случае, если Вы работаете только с HTML , Вам предстоит редактировать меню на каждой странице сайта - 10 раз. А если Ваш сайт состоит из 100 страниц, а меню навигации, например, подвергается полной переделке.

Вы представляете себе - какой объем работы Вам предстоит проделать?

Выход из этой ситуации очень прост. Как Вы правильно догадались - Рассмотрим на примере, как с ними работать.

Ниже представленный фрагмент кода - это исходный html -код верхнего навигационного меню моего сайта.



Верхнее меню расположено на каждой странице, поэтому есть смысл заключить представленный код в PHP блок . Что для этого нужно сделать?

Меняем расширение *.html на *.php у тех файлов, где вместо html -кода навигационного меню будем размещать PHP блок .


Создаем php -файл с подходящим по смыслу названием. Например, up_menu.php (от англ. up - верх и menu - меню ).


Копируем html -код верхнего меню и вставляем его в созданный файл up_menu.php . И этот же html- код необходимо удалить со страниц сайта с расширением *.php .


Размещаем на месте удаленного кода файл up_menu.php при помощи конструкции include , предназначенной для включения файлов в код сценария PHP (конструкция include подключает код, находящийся во внешнем файле ).


Синтаксис PHP при этом таков:

В нашем случае:

Ну вот и все! Наше навигационное меню расположено на своем месте. И теперь для его редактирования необходимо исправить код в файле up_menu.php . Этого будет достаточно, чтобы внесенные изменения коснулись всех страниц сайта, где установлен соответствующий PHP блок .

Как правило, при использовании PHP блоков , в корневом каталоге сайта создается папка blocks , в которой содержаться все блоки текущего сайта. Например:

Header.php - блок для шапки сайта (от англ. header - заголовок, головная часть );

Footer.php - блок для футера (нижней части ) сайта (от англ. footer - нижний колонтитул );

Up_menu.php - уже упомянутый файл, содержащий код верхнего меню навигации;

Left_menu.php - блок, содержащий код левого меню навигации;

И т.д.

Таких блоков может быть создано столько, сколько Вам нужно непосредственно для Вашего сайта.

В итоге, с учетом созданной папки blocks , синтаксис при вставке PHP-блоков таков:

Сначала указываем папку, в которой расположены все блоки, а затем имя нужного блока!

Вот таким образом происходит работа с PHP-блоками . Как видите использование только этой возможности языка PHP позволяет значительно повысить функциональность любого сайта.

Каждый мастер нуждается в отличном наборе инструментов, и вэб разработчики в данном вопросе не отличаются от других мастеров. Вспомогательные функции PHP разработаны для ускорения выполнения и придания однородности повторяющимся задачам.

Данный урок описывает концепцию вспомогательных функций PHP и процесс написания обобщенного кода, который можно будет использовать снова и снова. Данные функции ускоряют и делают более ясным процесс разработки приложения, так как повторяющиеся задачи сводятся к минимуму.

Вспомогательная функция для ссылок

Одной из распространенных повторяющихся задач является написание ссылок. С помощью создания вспомогательной функции для данной задачи мы можем сократить время разработки приложения, исключить возможность синтаксических ошибок, и сделать код более простым для модификации, если файл будет удален или сайт будет перемещен на другой домен. Для начала напишем очень простую функцию в файле helpers.php:



Понравилась статья? Поделитесь ей
Наверх