Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Использование паттернов в PHP

Rusa


Использование паттеl 20420w2214u 8;нов в PHP

Популярные среди фанатов C++ и Java, паттеl 20420w2214u 8;ны (шаблоны) проектирования очень редко обсуждаются программистами на PHP. Однако они являются важной частью компьютеl 20420w2214u 8;ной науки. Более того, они применимы к любому языку, даже PHP.



Первой популярной книгой по паттеl 20420w2214u 8;нам проектирования была книга "Приемы объектно-ориентированного проектирования. Паттеl 20420w2214u 8;ны проектирования", написанная авторами Э. Гамма, Р. Хелм, Р. Джонсон, Дж. . Авторов окрестили "Банда четырех" (Gang of Four), из-за чего шаблоны, описанные в книге, стали называть GoF.

Определение паттеl 20420w2214u 8;на

Интуитивно мы узнаем паттеl 20420w2214u 8;ны при программировании в каждой строке кода. Используя массив, вы уже представляете оптимальную идиому для прохождения по нему. С тех пор, как в PHP появилось выражение foreach, оно стало моим любимым.

Другой пример. С более широкой точки зрения мы встречаемся с другой знакомой проблемой: куда в PHP-скрипт поместить функциональность. Большинство проектов требуют разделения функциональности на несколько модулей. Для простого информационного сайта хорошо подходит простая схема с использованием футеl 20420w2214u 8;ов и хедеров, включаемых в страницу.

В обоих примерах существует поставленная проблема и заученное решение. Условием определения паттеl 20420w2214u 8;на является наличие известного решения. Более того, после многократного использования решения, вы можете дать оценку побочным явления, плохим или хорошим, этого решения.

Формальное определения паттеl 20420w2214u 8;на проектирования состоит из четырех частеl 20420w2214u 1;:

дает нам удобный способ ссылаться на паттеl 20420w2214u 8;н. Описание проблемы дает набор условий, в которых паттеl 20420w2214u 8;н можно применять. Решение описывает общую стратегию по достижению наилучшего разрешения проблемы. В заключении, в паттеl 20420w2214u 8;не описываются следствия, которые возникают при применении паттеl 20420w2214u 8;на.

Решения на основе паттеl 20420w2214u 8;нов не очень изобретатеl 20420w2214u 3;ьны. Они не требуют использования загадочных фишек. Паттеl 20420w2214u 8;ны предоставляют надежные проверенные временем решения. Обычно они оптимизированы для повторного использования, а не для эффективности. Решения оптимизированные для производитеl 20420w2214u 3;ьности имеют преимущества в отдельных ситуациях и обычно не подходят для общего случая. Например, если вам надо получить сумму трех чисел, вы сделаете это одной строкой кода. Однако общий случай будет, скажем, сложение 10000 чисел, и для этого надо применять массив и цикл.

Паттеl 20420w2214u 8;ны тесно связаны с объектно-ориентированным проектированием. С помощью объектно-ориентированного программирования можно создавать достаточно общие модули, называемые объектами. Паттеl 20420w2214u 8;ны проектирования дают общее решение распространенных проблем. Это позволяет не изобретать велосипед.

Строго говоря, PHP нельзя назвать объектно-ориентированным языком. У нас есть структуры данных, которые объединяют методы и свойства, однако у нас нет защищенных переменных. Однако это не влияет на применимость ООП. Несколько паттеl 20420w2214u 8;нов будет рассмотрено ниже и будет показано, как обойти недостаток фишек ООП в PHP.

В книге GoF авторы указывают на то, что среда программирования влияет на то, что можно считать паттеl 20420w2214u 8;ном. Например, полиморфизм подходящий паттеl 20420w2214u 8;н для процедурных языков программирования, в то время как объектно-ориентированные языки, такие как Java, включают его как встроенное свойство.

Существует множество паттеl 20420w2214u 8;нов, которые можно было бы здесь привести, однако будут приведены несколько самых известных. Остальные вы можете исследовать самостоятеl 20420w2214u 3;ьно, благо книг по этой тематике достаточно. Надо сказать, что применение паттеl 20420w2214u 8;нов в PHP требует некоторых уловок.

Паттеl 20420w2214u 8;н " " (singleton) применяется в ситуациях, когда нужен единичный экземпляр класса. Применитеl 20420w2214u 3;ьно к PHP можно рассмотреть селектор, который вы используете на странице несколько раз. Вы можете создать большую глобальную переменную и запихать в нее HTML-код, однако вы не сможете в этом случае задавать, скажем, значение по умолчанию. То есть вам каждый раз придется писать новый код, что не является очень хорошим решением с точки зрения поддержки и развития ресурса.

Вместо использования глобальной переменной, паттеl 20420w2214u 8;н " " реализуется с помощью класса со статическим методом, который возвращает объект. Вы вызываете статический метод напрямую, без предваритеl 20420w2214u 3;ьного объявления экземпляра объекта. До последнего времени PHP не поддерживал статические методы. В приведенной ниже реализации паттеl 20420w2214u 8;на " " используется функция со статической переменной. Если вы используете последние версии PHP 4, то можете пользоваться нотацией class::method().

Ниже приведена реализация селектора выбора цвета, который содержит названия цветов. Реализация состоит из двух частеl 20420w2214u 1;: определение класса и вспомогатеl 20420w2214u 3;ьной функции, в которых и применен паттеl 20420w2214u 8;н " ". Вспомогатеl 20420w2214u 3;ьная функция может быть настроена для многих классов, чтобы преобразовывать их в " ". В других языках мы можем создать общий , от которого наследовать более специфичные.

<?php

// colorSelector

class colorSelector

/*

** Public

//установка значения по умолчанию

function setDefault($default)

//возвращение HTML-кода селектора

function getHTML()

$html .= ">$v</option>\n";

}

$html .= "</select>\n";

return($html);

}

//вспомогатеl 20420w2214u 3;ьная функция, которая реализует паттеl 20420w2214u 8;н " "

function getColorSelector($default)

$instance->setDefault($default);

return($instance);

?>

Комментарии в коде относитеl 20420w2214u 3;ьно public и private членов класса вставлены для информирования программистов. Заметьте, что конструктор сам по себе является private методом. Это является частью реализации паттеl 20420w2214u 8;на " ". Создавать экземпляр colorSelector может только метод getColorSelector. Если бы мы использовали Java, эта функция была бы статическим методом класса.

Ниже приведен пример использования паттеl 20420w2214u 8;на " ". В реальном проекте между двумя вызовами getColorSelector может быть несколько сотеl 20420w2214u 5; строк кода. Вызовы могут быть и в разных модулях. Это объясняет причину, по которой я просто не использовал еще раз ту же переменную $c.

<?php

// colorSelector

include_once('colorSelector.php');

//

$c = getColorSelector(1);

print($c->getHTML());

//продолжение формы

//вызываем другой селектор цвета

$c = getColorSelector(2);

print($c->getHTML());

?>

Паттеl 20420w2214u 8;н " " имеет некоторые преимущества по сравнению с глобальной переменной. Пока мы используем вспомогатеl 20420w2214u 3;ьную функцию, мы имеем только один экземпляр класса. Это позволяет избежать затрат при запуске и оптимизировать использование памяти.

Заключение функциональности colorSelector в класс хорошо иллюстрирует паттеl 20420w2214u 8;н, но может не совпадать с вашим стилем программирования. Вы можете достичь таких же результатов, выдернув методы из класса и создав отдельные функции. В данном случае вы должны будете перенести свойства класса value и default в getColorSelector.


Document Info


Accesari: 995
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )