Yii Framework Deutschland
Anzeige


Was sind Behaviors und wozu sind sie da?

Kurz gesagt: Behavoirs erweitern ein Objekt um Funktionen, die dieses Objekt eigentlich nicht besitzt.

Dies kann zum Beispiel ein Taschenrechner sein, der zwei Funktionen hat. Addieren und Subtrahieren. Allerdings erstelle ich die Methoden dazu nicht im Taschenrechner (Calculator) Objekt sondern füge diese Funktionalität einfach zu diesem Objekt hinzu.

Beispiel:

1
2
3
4
5
6
7
8
9
<?php
class Addition
{
     public function add($a, $b) {
         $result = $a+$b;
 
        return $result;
    }
}

 

1
2
3
4
5
6
7
8
9
10
<?php
 
class Subtrakton
{
    public function sub($a, $b) {
        $result = $a-$b;
 
        return $result;
    }
}

 

1
2
3
4
5
6
7
<?php
 
class Calculator extends Addition, Subtraktion 
 
{
 
}

 

1
2
3
$calculator = new Calculator();
echo $calculator->add(4,2); // sollte eigentlich 6 ergeben, funktioniert aber nicht
echo $calculator->sub(6,2); // sollte eigentlich 4 ergeben, funktioniert aber nicht
 
Ups. Das funktioniert in PHP nicht. PHP erlaubt keine Mehrfachvererbung. Naja, dann packen wir halt alle Methoden in Calculator rein. Dies ist in unserem Beispiel noch ganz gut möglich, aber in einer richtigen Anwendung ist das keine gute Vorgehensweise.
 
Yii bietet uns daher die wirklich sehr gute Möglichkeit der Behaviors.
 
Ich erweitere die vorherigen Klassen wie folgt:
 
1
2
3
4
5
6
7
8
9
<?php
class Addition extends CBehavior
{
     public function add($a, $b) {
         $result = $a+$b;
 
        return $result;
    }
}

 

1
2
3
4
5
6
7
8
9
<?php
class Subtrakton extends CBehavior
{
    public function sub($a, $b) {
        $result = $a-$b;
 
         return $result;
    }
}

 

1
2
3
4
5
6
<?php
 
class Calculator extends CBehavior
{
 
}

 

Dann erstelle ich das Calculator Objekt und füge die beiden Methoden der Klassen mit attachbehavior hinzu.
 
1
2
3
4
5
$calculator = new Calculator();
$calculator->attachbehavior('add', new Addition);
$calculator->attachbehavior('sub', new Subtraktion);
echo $calculator->add(4,2); // ergibt 6 und zeigt es auch an
echo $calculator->sub(6,2); // ergibt 4 und zeigt es auch an
 
Das war es auch schon. Die Benutzung ist sehr einfach und vor allem auch austauschbar. Im Prinzip ist es eine Art der Dependency Injection. Ich könnte das Objekt Addition austauschen durch ein anderes Objekt, welches auch die add Methode enthält und es würde direkt funktionieren.

Zurück zur Übersicht

Anzeige
Copyright © 2017 by Dirk Helbert. All Rights Reserved..