0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p><a>Текучий интерфейс (Fluent Interface)</a>удобен для создания DSL. Domain Specific Language (Предметно-ориентированный язык) - язык, специализированный под конкретную область применения. Структура такого языка отражает специфику решаемых с его помощью задач. Яркий пример подобного языка - библиотека<a>jQuery</a>, с которой знакомо большинство программистов (или хотя бы слышали о ней).</p>
1
<p><a>Текучий интерфейс (Fluent Interface)</a>удобен для создания DSL. Domain Specific Language (Предметно-ориентированный язык) - язык, специализированный под конкретную область применения. Структура такого языка отражает специфику решаемых с его помощью задач. Яркий пример подобного языка - библиотека<a>jQuery</a>, с которой знакомо большинство программистов (или хотя бы слышали о ней).</p>
2
<p>На техническом уровне есть ровно два способа создать такой интерфейс.</p>
2
<p>На техническом уровне есть ровно два способа создать такой интерфейс.</p>
3
<h2>This</h2>
3
<h2>This</h2>
4
<p>Первый способ основан на возврате $this из методов, которые участвуют в построении цепочек. $this - ссылка на тот объект, в контексте которого вызывается метод, а, следовательно, его можно возвращать как обычное значение.</p>
4
<p>Первый способ основан на возврате $this из методов, которые участвуют в построении цепочек. $this - ссылка на тот объект, в контексте которого вызывается метод, а, следовательно, его можно возвращать как обычное значение.</p>
5
<p>У этого способа есть один серьёзный недостаток - объект изменяется. Это значит, что нельзя взять и просто так переиспользовать объект-коллекцию для разных выборок, потому что они начнут накладываться друг на друга.</p>
5
<p>У этого способа есть один серьёзный недостаток - объект изменяется. Это значит, что нельзя взять и просто так переиспользовать объект-коллекцию для разных выборок, потому что они начнут накладываться друг на друга.</p>
6
<p>На практике часто используется другой подход, с которым мы уже познакомились в прошлом курсе. Все, что нужно сделать - добавить немного функциональности в ооп, то есть возвращать не $this, а создавать новый объект того же типа с обновлённой коллекцией.</p>
6
<p>На практике часто используется другой подход, с которым мы уже познакомились в прошлом курсе. Все, что нужно сделать - добавить немного функциональности в ооп, то есть возвращать не $this, а создавать новый объект того же типа с обновлённой коллекцией.</p>
7
<p>Теперь каждый вызов возвращает новый объект. Такой код значительно безопаснее в использовании и позволяет без проблем переиспользовать новые коллекции. Изменение одной не приведёт к автоматическому изменению всех остальных.</p>
7
<p>Теперь каждый вызов возвращает новый объект. Такой код значительно безопаснее в использовании и позволяет без проблем переиспользовать новые коллекции. Изменение одной не приведёт к автоматическому изменению всех остальных.</p>
8
<h2>self</h2>
8
<h2>self</h2>
9
<p>В каждом методе, который участвует в создании текучего интерфейса, последняя строчка всегда содержит один и тот же вызов: new Collection($coll). Её можно записать проще, не дублируя названия класса. Помните, как в предыдущем курсе использовался self для работы со статическими членами класса? Так вот self работает и с обычными методами, вызов new self($coll) идентичен вызову new Collection($coll), другими словами вместо self подставляется текущий класс. У такого вызова есть ещё одно преимущество, о котором мы поговорим в следующем ООП курсе, в теме наследования. В двух словах self реализуется посредством позднего связывания и при наследовании раскрывается в тот класс, с которым прямо сейчас идёт работа.</p>
9
<p>В каждом методе, который участвует в создании текучего интерфейса, последняя строчка всегда содержит один и тот же вызов: new Collection($coll). Её можно записать проще, не дублируя названия класса. Помните, как в предыдущем курсе использовался self для работы со статическими членами класса? Так вот self работает и с обычными методами, вызов new self($coll) идентичен вызову new Collection($coll), другими словами вместо self подставляется текущий класс. У такого вызова есть ещё одно преимущество, о котором мы поговорим в следующем ООП курсе, в теме наследования. В двух словах self реализуется посредством позднего связывания и при наследовании раскрывается в тот класс, с которым прямо сейчас идёт работа.</p>
10
10