Fluent Interfaces

0 | 5976 Aufrufe
Sie können diese Wikiseite nach der Anmeldung auf Webmasterpro bearbeiten. Helfen Sie mit und verbessern Sie "Fluent Interfaces" mit Ihrem Wissen!

Anzeige Hier werben

In diesem Artikel bringe ich euch das sogenannte Fluent Interface näher. Fluent Interface sind verkettete Methoden die erst seit PHP 5 genutzt werden können. Das Fluent Interface ermöglicht es den Quellcode beinahe in Satzform zu schreiben. Dies erspart einem viel unnötigen Quellcode und fördert die Lesbarkeit des Quellcodes.

Falls Ihr euch darunter nichts vorstellen könnt, erkläre ich es euch an einem Beispiel. Dazu habe ich eine kleine Klasse zur Veranschaulichung geschrieben.

 
PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
PHP// Normal 
class ImageResize 
{
    protected $_image = null;

    public function setImage($image)
    {
        $this->_image = $image;
    }

    public function resizeImage($dimensions)
    {
        // do image resizing
    }

    public function save($path)
    {
        // do something
    }
}

// Fluent Interface
class ImageResize 
{
    protected $_image = null;

    public function setImage($image)
    {
        $this->_image = $image;
        return $this;
    }

    public function resizeImage($dimensions)
    {
        // do image resizing
        return $this;
    }

    public function save($path)
    {
        // do something
        return $this;
    }
}

Im ersten Klassenbeispiel verwende ich kein Fluent Interface. Dort würde man die Methoden wie folgend anrufen.

 
PHP
1
2
3
4
$imageResize = new ImageResize();
$imageResize->setImage('path/file.jpg');
$imageResize->resizeImage(['1024','768']);
$imageResize->save('newpath/file_resized.jpg');

Diese Variante kann bei mehr Methoden schnell unübersichtlich und zu viel unnötigem Quellcode führen.
Würde man nun das Fluent Interface Pattern nutzen, so würde der Quellcode wie folgend aussehen.

 
PHP
1
2
$imageResize = new ImageResize();
$imageResize->setImage('path/file.jpg')->resizeImage(['1024','768'])->save('newpath/file_resized.jpg');

In diesem Fall wird sehr schön die Satzform sichtbar. Einem Programmierer fällt es so meist viel leichter den Quellcode zu lesen. Es gibt hier auch verschiedene Coding Style Guides. Ich persönlich bevorzuge folgenden Style Guide:

 
PHP
1
2
3
4
$imageResize = new ImageResize();
$imageResize->setImage('path/file.jpg')
            ->resizeImage(['1024','768'])
            ->save('newpath/file_resized.jpg');

Wie funktioniert das Fluent Interface

Im Grunde ist es ganze einfach. Das Fluent Interface gibt in jeder "setter" Methode einen Returnwert zurück. Dieser Returnwert ist die Instanz der Klasse, also $this.

Wenn eine der Methoden gedumpt wird, sieht man alle Eigenschaften der Klasse.

Fazit

Das Fluent Interface Pattern bringt außer der Lesbarkeit des Quellcodes keine Vorteile in der Programmfunktionsweise. IDEs wie Eclipse oder NetBeans unterstützen Fluent Interface und bieten durch die Autovervollständigung meist die als nächstes aufzurufende Methode an.


Wikiseite bearbeiten

Diese Seite kann von jedem registrierten Benutzer bearbeitet werden. Bisher haben 2 Personen an der Seite "Fluent Interfaces" mitgewirkt.

Sie haben einen Fehler entdeckt oder möchten etwas ergänzen? Dann können Sie nach der Anmeldung "Fluent Interfaces" hier bearbeiten.

Mitarbeiter