Arrays als Objekte nutzen mit der ArrayObject-Klasse

in #deutsch6 years ago




DQmPiKcYtB7kqiL7JBjL6JuybPbUPxNvxTAkFarMCAP5xZK_1680x8400.jpeg


Arrays unter PHP - objektorientiert einsetzen

Einfaches Array

Kurz zur Erinnerung. Arrays werden für gewöhnlich wie folgt definiert:


    $zutaten = [
        'Teigboden' => 1,
        'Tomaten' => 3,
        'Pilze' => 12,
        'Käsestück' => 2
    ];


Um auf das Array zuzugreifen, reicht der Aufruf des Array-Schlüssels wie z.B. 'Tomaten', aus. Die Anzahl 3 der Zutat 'Tomaten' aus unserem Array wird dadurch zurückgeliefert.


    print_r (
        $zutaten[ 'Tomaten' ] . PHP_EOL
    );


Soweit ist das erstmal nicht ungewöhnlich. Stellen wir uns nun vor, wir wollen Funktionen auf unserem Array ausführen. Z.B. soll die Zutatenliste sortiert werden.


    ksort ( 
        $zutaten 
    );

    print_r ( 
        $zutaten
    );


Wir bekommen dann, wie erwartet, eine sortierte Zutatenliste zurück.


Array
(
    [Käsestück] => 2
    [Pilze] => 12
    [Teigboden] => 1
    [Tomaten] => 3
)


Wenn wir jetzt nur eine einzelne Zutatenliste für eine einzige Anwendung sortieren, dann ist dieses Vorgehen ausreichend. Wollen wir aber unsere Liste öfter an verschiedenen Stellen verwenden, müssen immer wieder alle benötigten Funktionen vor Ort aufgerufen werden. Problematisch wird es, wenn wir selber Funktionen definiert haben. Wie z.B. backe_pizza(). Überall muss dann ein Verweis auf die Funktion deklariert werden. Sollten weitere Funktionen hinzukommen, wie z.B. verkaufe_pizza() müssen wieder alle neuen Funktionen überall bekannt gemacht werden, wo man diese verwenden möchte.

Ein weiteres Problem ist auch, dass man immer wissen muss welcher Funktionsname für den Datentyp Array unserer $zutaten zuständig ist.

Natürlich könnte man alle Funktionen auswendig lernen. Mit der Zeit wird jedoch die Vielzahl an Funktionen in Anwendungen immer unübersichtlicher. Man müsste z.B. wissen ob sort() nur Arrays sortiert oder auch von anderen Datentypen genutzt werden kann.

Die Lösung besteht darin, die Funktionen an Objekte zu binden, die sie verwenden sollen. Genau das ermöglicht die Klasse ArrayObject.

Arrays als Objekte nutzen mit der ArrayObject-Klasse

Ab PHP 5 wird die Klasse ArrayObject angeboten. Diese kann dann als Wrapper ( Umpacker ) für ein bestehendes Array verwendet werden. Dadurch ist das Array nun auch als Objekt nutzbar. Das neue Objekt bringt alle Methoden ( Funktionen ) mit, die sich typischer Weise auf ein Array anwenden lassen.


 $zutaten = [
                'Teigboden' => 1,
                'Tomaten' => 3,
                'Pilze' => 12,
                'Käsestück' => 2
            ];
            
$zutaten_obj = new ArrayObject( $zutaten );
$zutaten_obj -> setFlags( ArrayObject::ARRAY_AS_PROPS );

//call's
echo $zutaten_obj['Käsestück'];
echo $zutaten_obj -> Käsestück;
echo $zutaten_obj -> count ();


Weitere Möglichkeiten, um ArrayObjekte anzusprechen, sind in der offiziellen PHP-Dokumentation zu finden:

Zum Ausprobieren habe ich das Projekt bei GitHub bereitgestellt:





#webdevelopment #code #coding #dev #development #programming #codedesign #codereview #cleancode #steemit #utopian-io #technology #science #deutsch #deutschland #german #germany #orginal #diy #php #php5 #php7 #oop #ood #webserver #webdev


rect4138.png