Техника ООП. Цепочки.
В сегодняшнем небольшом посте я расскажу про один очень полезный и удобный 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, значение которого было описано в одной из наших статей про ООП.
Техника довольно проста в реализации и, в то же время, ей можно найти много применений. Так что пользуйтесь и пишите где ее удалось еще использовать!
Удачи.
Думаю новичкам пригодится, техника очень удобная.
Мега уважение автору!
Сколько строк кода уж написано за 2 года, а подобная методика не применялась.
Стыжусь и отныне применяю. Экономит время при установке инкапсулированных данных, делает код изящнее.
Ай молодец автор! Сколько читаю - всегда что-то новенькое и интересное попадется
После прочтения аж руки зачесались и в голове мысли сменяют одна другую со скоростью света… ну а самое интересное - простота реализации!
[ссылка]