dedlfix: Eindimensionales Array zu Mehrdimensionalem Objekt konvertieren

Beitrag lesen

Hi!

Du hast Pfadteile einer URL, und das sind allgemein gesagt Daten. Und aus diesen Daten willst du Code generieren. Sowas geht nur mit solchen Laufzeit-Sprachen. Bei Sprachen mit Kompilierung ist der Code und somit Namen von Variablen, Klassen, Funktionen und so weiter (ohne Reflection) gar nicht mehr vorhanden. Dort würde dein Vorhaben ganz scheitern.

Naja, aber genau deswegen nehme ich doch eine Interpretersprache wie PHP, oder nicht? :-)

Nein, auch Interpretersprachen nimmt man nicht dazu, aus Daten Code zu generieren, den man dann wie Daten verwendet.

Aber abgesehen davon kannst du auf solch ein Objekt, wie es dir anstrebt, im Gegensatz zu deiner Ausgangssstruktur, beispielsweise kein implode('/', $url_array) anwenden, um daraus wieder den Pfad-Teil der URL zu bekommen.

Aber ich habe doch eine Variable:

$url = $_GET["side"];

$sides = explode("/",$url);

  
Warum legst du eine Kopie der URL in $url an, obwohl sie doch schon in $\_GET["side"] enthalten ist?  
  

> Dann habe ich doch meinen URL-String und mein Array :-)  
> implode() brauche ich dann doch nicht mehr, oder?  
  
Das musst du wissen. Wenn du die vollständige URL nicht mehr benötigst, dann brauchst du auf Dinge wie implode() im Prinzip keine Rücksicht zu nehmen. Allerdings bleibt es trotzdem unsinnig, den Code als Datenspeicher zu missbrauchen.  
  

> > Ob OOP oder nicht, ist keine Frage des Stils. Abstrahieren ist ja nicht prinzipell verkehrt, aber Daten zu Code zu wandeln hat damit nichts zu tun.  
> Naja, die Daten kann man doch aber gegenstänlich betrachten, bspw. Mein Blog hat ja Eigenschaften, und die sind ja via Objekt darstellbar.  
> Ich bin jetzt ehrlich gesagt ein bisschen verwirrt was den Umgang mit Objekten angeht.  
  
Du missachtest den Unterschied zwischen dem Wert und dem Namen der Eigenschaften. Du verwendest den Namen als Speicher für den Wert.  
  

> Sonst bin ich immer so ran gegangen: Alles was gegenständlich behandelt werden kann, kann auch in ein Objekt. Und ein Objekt mache ich eben weil es guter Stil sein soll.  
  
Ein Objekt ist nicht per Definition guter Stil. Wenn man deine Vorgehensweise auf eine einfache Variable abbildet, verwendest du nicht  
  
  $name = "Kurzer Name";  
  
sondern  
  
  ${'Kurzer Name'} = true;  
  
Abgesehen von der umständlichen Schreibweise wegen des Leerzeichens - wie sprichst du nun aus deinem Haufen Variablen diejenige mit deinem Namen an?  
  

> Also soll ich diese Abstraktion lassen.  
  
Das ist keine Abstraktion. Eine Abstraktion ist eine Verallgemeinerung wie das Verwenden einer Variable statt eines konkreten Wertes.  
  

> Ne Webseite kann man ja auch abstrahieren, die hat ja auch logisch betrachtet Eigenschaften und Methoden.  
  
Du hast nach der Abstraktion ein Model einer Website, ohne dass konkrete Daten eine Rolle spielen. In deinem Versuch jedoch baust du aus konkreten Daten ein Gerüst. Das Ergebnis ist, dass du Code hast, der aus den Daten Gerüste baut und welchen, der diese Gerüste untersuchen muss, damit er wieder an die Daten kommt.  
  

> Also bspw.  
> `$MeineWebseite->RufeSeiteAuf("Galerie/Anzeigen");`{:.language-php}  
> widerspricht doch eigentlich nicht dem abstrahieren, oder?  
  
Nein, aber ähnlich zu deinem Versuch hättest du eher $MeineWebseite->{'Galerie/Anzeigen'}() und müsstest dann aus dem Namen der Funktion die Daten extrahieren.  
  

> Es gibt ja auch überall in Büchern als Beispiel:  
> ~~~php

$MeinAuto = new $Car  

> $MeinAuto->SetColor("Rot");

Ja. Lassen wir mal den Setter weg, schriebe man das so:

$MeinAuto->Color = "Rot";

Dein Versuch aber entspricht

$MeinAuto->Rot = true;

Ich richte mich ja nach solchen Beispielen in Büchern, ist das denn verkehrt? :-(

Nein, natürlich nicht, aber so wie du das versucht hast, steht es garantiert in keinem (empfehlenswerten) Buch.

Lo!