Техника ООП. Цепочки.
В сегодняшнем небольшом посте я расскажу про один очень полезный и удобный php-трюк или ООП-прием или называйте как хотите. В конечном итоге с помощью этой техники можно значительно сократить код и сделать его более удобным для чтения.
Технику я называл цепочками, по аналогии с механизмом в jQuery (мы как-то писали об этом в статье про jQuery).
Предположим, что перед нами стоит задача – реализовать на php класс для форматирования текста. Путь будет только три функции – выделить жирным (bold), сделать курсивом (italic) и подчеркнуть (underline).
При обычной реализации этого класса, при одновременном применении нескольких действий у нас может получиться что-то вроде:
$str = 'qwe'; // текст, который нужно выделить $text = Text->Bold($str); $text = Text->Italic($str); echo $text;
А после использования техники цепочек это можно будет сделать так:
$str = 'qwe'; echo $text = Text->Bold($str)->Italic($str);
Гораздо короче и проще выглядит, не так ли?
Чтобы реализовать этот механизм на деле, нужно чтобы каждый метод, который применяется в цепочке, возвращал объект, к которому он относится.
Сразу приведу пример реализации этого механизма для нашего случая. Он достаточно прост.
text.class.php
<?php
class Text {
var $text;
function set($text) {
$this->text = $text;
return $this;
}
function bold($str) {
$this->text = str_replace($str, '<b>'.$str.'</b>', $this->text);
return $this;
}
function italic($str) {
$this->text = str_replace($str, '<i>'.$str.'</i>', $this->text);
return $this;
}
function underline($str) {
$this->text = str_replace($str, '<u>'.$str.'</u>', $this->text);
return $this;
}
function __toString() {
return $this->text;
}
}
?>
index.php
<?php
require_once 'text.class.php';
$sentence = 'Hello, it is my first web application.';
$text = new Text();
$text = $text->set($sentence)->bold('Hello')->italic('first')->underline('web');
echo $text;
?>
В этом примере непонятным может остаться только специальный метод _ToString, значение которого было описано в одной из наших статей про ООП.
Техника довольно проста в реализации и, в то же время, ей можно найти много применений. Так что пользуйтесь и пишите где ее удалось еще использовать!
Удачи.
Октябрь 21st, 2008
Думаю новичкам пригодится, техника очень удобная.
Январь 23rd, 2009
Мега уважение автору!
Сколько строк кода уж написано за 2 года, а подобная методика не применялась.
Стыжусь и отныне применяю. Экономит время при установке инкапсулированных данных, делает код изящнее.
Февраль 19th, 2009
Ай молодец автор! Сколько читаю – всегда что-то новенькое и интересное попадется
После прочтения аж руки зачесались и в голове мысли сменяют одна другую со скоростью света… ну а самое интересное – простота реализации!
Апрель 2nd, 2009