Улучшаем собственную производительность с использованием вспомогательных функций 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 раз?

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

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

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

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