Kurzer Name: Eindimensionales Array zu Mehrdimensionalem Objekt konvertieren

Ausgangsarray:

Array  
(  
    [0] => MeinBlog  
    [1] => 2010  
    [2] => 12  
    [3] => 5  
)

Zielobjekt:

$MeinBlog->2010->12->5 = true;

Ich habe über die Suche nur gefunden, wie man ein mehrdimensionales Array in ein Eindimensionales Array umwandeln kann, jedoch konnte ich daraus keine Ansätze für mein Problem entnehmen :-(

Im Prinzip müsste es ja so aussehen:

$object;  
  
foreach($array as $key => $value)  
{  
  $object .= $key."=>".$value",";  
}

Nur anstatt "String anhängen" müsste ich irgendwie sagen "Objekt anhängen".
Nur mit

$object;  
  
foreach($array as $key => $value)  
{  
  $object->{$key} = $value;  
}

bleibe ich in meiner einen Dimension hängen -_-

Hat jemand eine Idee?

  1. Hi!

    Ich habe über die Suche nur gefunden, wie man ein mehrdimensionales Array in ein Eindimensionales Array umwandeln kann, jedoch konnte ich daraus keine Ansätze für mein Problem entnehmen :-(

    Vergiss die Begriffe eindimensional und mehrdimensional, wenn es um Arrays unter PHP geht. Für Objekte ist er komplett fehl am Platz. Er verstellt möglicherweise nur, die wirkliche Natur von PHP-Arrays zu sehen. Sie sind eine Ansammlung von Schlüssel-zu-Wert-Zuordnungen. Werte können skalare Typen oder Arrays und Objekte sein. Es ergibt sich immer eine Baumstruktur, auch wenn diese unter Umständen so regelmäßig ist, dass sie mit einem mehrdimensionalen Array vergleichbar ist. In deinem Fall ist es nur eine typische baumstrukturartige Verschachtlung.

    Zielobjekt:
    $MeinBlog->2010->12->5 = true;

    $MainBlog soll eine Eigenschaft mit dem Namen 2010 haben, deren Wert ein Objekt der Default-Klasse stdClass sei. Dieses soll auch nur eine Eigenschaft haben, deren Name 12 sein soll und ebenfalls ein Objekt von stdClass ist, welches wiederum eine Eigenschaft namens 5 mit dem skalaren booleschen Wert true sein soll.

    Im Prinzip müsste es ja so aussehen:
    Nur anstatt "String anhängen" müsste ich irgendwie sagen "Objekt anhängen".

    Wenn du das einen String zusammenbaust, brauchst du eval, um daraus Code zu generieren.

    Nur mit

    $object;

    foreach($array as $key => $value)
    {
      $object->{$key} = $value;
    }

    
    > bleibe ich in meiner einen Dimension hängen -\_-  
      
    Ja, weil du nun mit $value weitermachen musst, denn das nächste Element muss dessen Kind werden.  
      
    
    > Hat jemand eine Idee?  
      
    Die Frage ist allerdings, was es bringt, solch eine Struktur aufzubauen. Am Ende weißt du doch gar nicht, welche Eigenschaften es gibt, um per Code darauf zuzugreifen. Ich sehe da überhaupt keinen Vorteil in diesem Vorgehen, eher noch den Nachteil, dass man schlechter über Objekteigenschaften als über (verschachtelte) Arrays iterieren kann. Können kann man schon, aber das ist auf alle Fälle stillos, über die Eigenschaften von Objekte zu iterieren, wo doch für solche Datensammlungen Arrays vorgesehen sind.  
      
      
    Lo!
    
    1. Danke das du dich so schnell gemeldet hast :-)

      Also bringen soll es mir ein Objekt das die URL-Angabe repräsentiert.

      Wenn ich als URL habe:
      http://irgendwas.de/MeinBlog/2010/12/3

      Wollte ich die in ein Objekt:
      $MeinBlog->2010->12->3 = true;

      abstrahieren.

      Das true am Ende bedeutet nur das eben genau diese URL jetzt gültig ist, bzw. aufgerufen wird.
      Ich dachte mir das ist irgendwie logischer als:

      $MeinBlog->2010->12 = 3

      Oder um ein besseres Beispiel anzubringen:

      http://www.meinewebseite.de/Galerie/Illustrationen/Anzeigen?category=2&limit=5

      Per RewriteRule ist Galerie/Illustrationen/Anzeigen ein ganzer Parameter der im PHP mittels explode in ein Array der Art:

      [0] => Galerie  
      [1] => Illustrationen  
      [2] => Anzeigen
      

      aufgesplittet wird.

      Und das wollte ich eben dann in ein Objekt der Form

      $Galerie->Illustrationen->Anzeigen

      konvertieren.

      Ich wollte hier mit einem Objekt arbeiten weil ich mal gehört habe das es wohl ein guter Stil sei eben mit Objekten als mit allem anderen zu arbeiten. Eben nach dem Motto: Soviel abstrahieren wie es nur geht.

      PHP mache ich nur Hobbymässig, und das meiste davon eigne ich mir selber an. Von gutem Programmierstil weiß ich da leider nicht viel, sry :-(
      Ich gebe mir aber Mühe meinen Code so verständlich wie möglich zu schreiben.

      Soviel zu dem Sinn hinter der ganzen Idee.

      Hast du eventuell einen Tipp wie man das besser lösen / gestalten könnte?

      1. Hi.

        Wenn ich als URL habe:
        http://irgendwas.de/MeinBlog/2010/12/3

        Was meinst Du denn mit "eine URL haben"?

        Wollte ich die in ein Objekt:
        $MeinBlog->2010->12->3 = true;

        abstrahieren.

        Daran ist irgendwie gar nichts abstrakt. Im Gegenteil: Variable Variablen (lies: Variablennamen, wie hier $MeinBlog [1], die nicht hart kodiert sind, sondern irgendwie von Skript-Input abhängen) sind fast immer schlecht, und geradezu alles andere als eine Abstraktion.

        Das true am Ende bedeutet nur das eben genau diese URL jetzt gültig ist, bzw. aufgerufen wird.

        Du hast im PHP-Skript eine URL vorliegen. Was meinst Du damit, dass sie aufgerufen wird? Wird sie *vom Skript* aufgerufen, oder ist es die URL, die vom Client aufgerufen wurde und das Skript gestartet hat?

        Oder um ein besseres Beispiel anzubringen:

        http://www.meinewebseite.de/Galerie/Illustrationen/Anzeigen?category=2&limit=5

        Per RewriteRule ist Galerie/Illustrationen/Anzeigen ein ganzer Parameter der im PHP mittels explode in ein Array der Art:

        [0] => Galerie

        [1] => Illustrationen
        [2] => Anzeigen

        
        >   
        > aufgesplittet wird.  
        >   
        > Und das wollte ich eben dann in ein Objekt der Form  
        >   
        > `$Galerie->Illustrationen->Anzeigen`{:.language-php}  
        >   
        > konvertieren.  
          
        Wozu denn eigentlich das Ganze? Wo im Skript interessiert es Dich, welche URL "gültig" ist? Sprich: Was machst Du mit Deiner Objekt-Eigenschaft `$Galerie->Illustrationen->Anzeigen`{:.language-php}, wie und wozu wertest Du sie aus?  
          
          
        
        > Ich wollte hier mit einem Objekt arbeiten weil ich mal gehört habe das es wohl ein guter Stil sei eben mit Objekten als mit allem anderen zu arbeiten.  
          
        Unsinn. Es ist sehr oft empfehlenswert, mit Objekten zu arbeiten, aber nicht um seiner selbst willen.  
          
          
        
        > Eben nach dem Motto: Soviel abstrahieren wie es nur geht.  
          
        Das hat a priori nicht viel mit Objekten oder Nicht-Objekten zu tun.  
          
          
        
        > Hast du eventuell einen Tipp wie man das besser lösen / gestalten könnte?  
          
        Was denn jetzt eigentlich? :-)  
          
          
          
        [1] Der Variablenname ist übrigens Meinblog, nicht $MeinBlog, um ganz genau zu sein.  
          
          
          
        Viele Grüße,  
        der Bademeister
        
        1. Hi.

          Wenn ich als URL habe:
          http://irgendwas.de/MeinBlog/2010/12/3

          Was meinst Du denn mit "eine URL haben"?

          Naja, eben die URL, die der Browser anfordert, die ist ja im PHP via $_SERVER Variable verfügbar. Wieso ist die Begrifflichkeit "eine URL haben" denn schon wieder verkehrt? :-(

          Wollte ich die in ein Objekt:
          $MeinBlog->2010->12->3 = true;

          abstrahieren.

          Daran ist irgendwie gar nichts abstrakt. Im Gegenteil: Variable Variablen (lies: Variablennamen, wie hier $MeinBlog [1], die nicht hart kodiert sind, sondern irgendwie von Skript-Input abhängen) sind fast immer schlecht, und geradezu alles andere als eine Abstraktion.

          Aber ich dachte immer eine Abstraktion ist die Wirklichkeit in ein Objekt hineingepackt, also eben Mein Blog ind $Meinblog, und der Block hat jetzt wieder verschiedene Eigenschaften, bspw. Anzahl der Einträge, usw. Ist das denn nicht abstrakt? :-(

          Das true am Ende bedeutet nur das eben genau diese URL jetzt gültig ist, bzw. aufgerufen wird.

          Du hast im PHP-Skript eine URL vorliegen. Was meinst Du damit, dass sie aufgerufen wird? Wird sie *vom Skript* aufgerufen, oder ist es die URL, die vom Client aufgerufen wurde und das Skript gestartet hat?

          Das ist die URL die vom Cliet kommt. Ich wollte aber versuchen das Skript unabhängig davon, von wo der Aufruf kommt zu gestalten. So das es am Ende von PHP, Client via User oder AJAX aufgerufen werden kann. Eben fast wie eine Funktion :-)

          Oder um ein besseres Beispiel anzubringen:

          http://www.meinewebseite.de/Galerie/Illustrationen/Anzeigen?category=2&limit=5

          Per RewriteRule ist Galerie/Illustrationen/Anzeigen ein ganzer Parameter der im PHP mittels explode in ein Array der Art:

          [0] => Galerie

          [1] => Illustrationen
          [2] => Anzeigen

          
          > >   
          > > aufgesplittet wird.  
          > >   
          > > Und das wollte ich eben dann in ein Objekt der Form  
          > >   
          > > `$Galerie->Illustrationen->Anzeigen`{:.language-php}  
          > >   
          > > konvertieren.  
          >   
          > Wozu denn eigentlich das Ganze? Wo im Skript interessiert es Dich, welche URL "gültig" ist? Sprich: Was machst Du mit Deiner Objekt-Eigenschaft `$Galerie->Illustrationen->Anzeigen`{:.language-php}, wie und wozu wertest Du sie aus?  
            
          Also das ganze soll dann so funktionieren das ich im PHP ein Objekt habe das alle aufrufbaren Seiten enthält.  
            
          Mein oben erzeugtes Objekt wird dann mit dem "Systemobjekt" verglichen, ob es die aufgerufene Webseite dort überhaupt existiert.  
          Tut sie das, wird die Seite aufgerufen und alle notwendigen PHP-Skripte dazu ebenfalls.  
          Existiert die aufgerufene Seite nicht, dann kommt eben ne 404-Seite.  
          
          >   
          >   
          > > Ich wollte hier mit einem Objekt arbeiten weil ich mal gehört habe das es wohl ein guter Stil sei eben mit Objekten als mit allem anderen zu arbeiten.  
          >   
          > Unsinn. Es ist sehr oft empfehlenswert, mit Objekten zu arbeiten, aber nicht um seiner selbst willen.  
          >   
          
          Jetzt bin ich noch mehr verwirrt >\_< und weiß garnicht mehr wann ich nun mit Objekten arbeiten soll und wann nicht :-(  
          
          >   
          > > Eben nach dem Motto: Soviel abstrahieren wie es nur geht.  
          >   
          > Das hat a priori nicht viel mit Objekten oder Nicht-Objekten zu tun.  
          >   
          >   
          > > Hast du eventuell einen Tipp wie man das besser lösen / gestalten könnte?  
          >   
          > Was denn jetzt eigentlich? :-)  
          >   
          
          Meine Sache mit der dollen Galerie und dem Blog :-)  
          
          >   
          > [1] Der Variablenname ist übrigens Meinblog, nicht $MeinBlog, um ganz genau zu sein.  
          >   
          >   
          
          Aber ist die Variablenbezeichnung nicht wieder eine Sache der eigenen Konventionen? :-(  
          
          >   
          > Viele Grüße,  
          > der Bademeister  
            
          Hör mal, um das schöne selfhtml-Forum nicht durch Grundsatzdebatten zu verschandeln (Was ich befürchte was wir nachdem du diesen Beitrag gelesen hast tun werden :-) ), wollen wir nicht via ICQ, Mail oder irgendwas anderes uns verständigen?
          
          1. Hi.

            Was meinst Du denn mit "eine URL haben"?

            Naja, eben die URL, die der Browser anfordert, die ist ja im PHP via $_SERVER Variable verfügbar. Wieso ist die Begrifflichkeit "eine URL haben" denn schon wieder verkehrt? :-(

            Ein URL ist eine Zeichenkette. Eine Zeichenkette, die eine Ressource identifiziert. Und ein PHP-Skript, das vom Server aufgerufen wird, um diese Ressource zu produzieren und auszuliefern, interessiert sich in den allermeisten Faellen nicht dafuer, wie der aufgerufene URL ausgesehen hat.

            Es gibt sicher Ausnahmen davon. Aber es war (mir) nicht klar, dass (und warum) Dein PHP-Skript sich fuer den aufgerufenen URL interessiert. Daher war das eine echte Frage. Und das "warum" ist mir immer noch nicht klar.

            Aber ich dachte immer eine Abstraktion ist die Wirklichkeit in ein Objekt hineingepackt,

            Ok, dann hoer jetzt bitte auf, das zu denken. :-)

            Eine Abstraktion ist... ich versuchs mal: das Erstellen von Code (seien es Funktionen, Klassen, ...), der nicht nur eine ganz konkrete Aufgabe erfuellt, sondern so gestaltet ist, dass er flexibel fuer verschiedene, artverwandte Probleme eingesetzt werden kann.

            Mal ein ganz einfaches Beispiel:
            Stell Dir eine Email-Klasse vor, mit der Du aus Deinen PHP-Skripten heraus automatisch Emails versenden kannst, etwa an Kunden. (Oder auch eine Email-Funktion, was geht hier jetzt nicht um Klassen an sich).

            Dann moechtest Du vielleictht, dass beim Abschicken der Email automatisch ein Email-Kopf mit Deinem Logo o.ae. eingebunden wird. Jetzt waere es schlecht, wenn der Email-Kopf hart kodiert in der Funktion steht, in der Art

            $emailText = "<h1>www.example.com - automatische Email</h1>" . $emailText;

            Dann kannst Du die Funktion naemlich nicht mehr gebrauchen, wenn Du

            • entscheidest, auf Plaintext-Emails umzusteigen (was wuenschenswert waere),
            • noch ne Website erstellst und von dort auch Emails verschicken willst, ohne diesen Header,
            • Dein Logo aenderst.

            Solche Dinge sollten aber nicht dazu fuehren, dass Du Deinen Programm-Code an 37 Stellen aendern musst. Also: Deine Email-Klasse sollte

            • Dir erlauben, den Mime Type (text oder html) als Parameter zu setzen
            • einen HTML-Kopf als Template einlesen, wenn gewuenscht

            damit Du bis in alle Ewigkeit alle Deine Emails mit dieser Klasse, d.h. demselben Programm-Code, versenden kannst und lediglich andere Templates zur Verfuegung stellen oder vielleicht noch ein paar Konstanten aendern musst.

            Das waere eine Abstraktion. Code unabhaengig von konkreten Umgebungsbedingungen schreiben.

            Das true am Ende bedeutet nur das eben genau diese URL jetzt gültig ist, bzw. aufgerufen wird.

            *wurde*, nicht wird (und: ein URL, also ein *String*, s.o.), wird nicht aufgerufen). Der Client hat mittels des URL die Ressource aufgerufen/angefordert, der Server hat das PHP-Skript gestartet. Alles laengst geschehen, alles ist in geordneten Bahnen. Wozu musst Du das jetzt extra im Skript behandeln?

            Das ist die URL die vom Cliet kommt. Ich wollte aber versuchen das Skript unabhängig davon, von wo der Aufruf kommt zu gestalten. So das es am Ende von PHP, Client via User oder AJAX aufgerufen werden kann. Eben fast wie eine Funktion :-)

            Ok.

            Also das ganze soll dann so funktionieren das ich im PHP ein Objekt habe das alle aufrufbaren Seiten enthält.

            Mein oben erzeugtes Objekt wird dann mit dem "Systemobjekt" verglichen, ob es die aufgerufene Webseite dort überhaupt existiert.
            Tut sie das, wird die Seite aufgerufen und alle notwendigen PHP-Skripte dazu ebenfalls.
            Existiert die aufgerufene Seite nicht, dann kommt eben ne 404-Seite.

            Verstehe ich nicht. Das erledigt der Server doch fuer Dich, oder nicht? Er ruft das fuer die angeforderte Seite passende Skript auf. Sonst haettest Du edn URL ja nicht in der _SERVER-Variable zur Verfuegung.

            Hast du eventuell einen Tipp wie man das besser lösen / gestalten könnte?

            Was denn jetzt eigentlich? :-)

            Meine Sache mit der dollen Galerie und dem Blog :-)

            Ich hab keine Ahnung, wie Du es bisher loest. Das, was wir hier besprochen haben, hat weder mit ner Galerie noch mit nem Blog irgendwas zu tun. Oder?

            Hör mal, um das schöne selfhtml-Forum nicht durch Grundsatzdebatten zu verschandeln (Was ich befürchte was wir nachdem du diesen Beitrag gelesen hast tun werden :-) ), wollen wir nicht via ICQ, Mail oder irgendwas anderes uns verständigen?

            Lass uns ruhig hier bleiben, fuer Diskussionen ist das Forum doch da.

            Viele Gruesse,
            der Bademeister

            1. Hi.

              Was meinst Du denn mit "eine URL haben"?

              Naja, eben die URL, die der Browser anfordert, die ist ja im PHP via $_SERVER Variable verfügbar. Wieso ist die Begrifflichkeit "eine URL haben" denn schon wieder verkehrt? :-(

              Ein URL ist eine Zeichenkette. Eine Zeichenkette, die eine Ressource identifiziert. Und ein PHP-Skript, das vom Server aufgerufen wird, um diese Ressource zu produzieren und auszuliefern, interessiert sich in den allermeisten Faellen nicht dafuer, wie der aufgerufene URL ausgesehen hat.

              Es gibt sicher Ausnahmen davon. Aber es war (mir) nicht klar, dass (und warum) Dein PHP-Skript sich fuer den aufgerufenen URL interessiert. Daher war das eine echte Frage. Und das "warum" ist mir immer noch nicht klar.

              Hmm, also jede Anfrage zu dem Server läuft via htaccess immer über die index.php. Und für jeden URL-Parameter (also das Zeugs zwischen den /) wird nen eigenes Script aufgeführt.

              Oder um genauer zu sein: Für jede mögliche Kombination der URL-Parameter werden bestimmte Scripte ausgeführt, bspw.

              "MeineGalerie/MeineUrlaubsbilder"

              Da wird dann das Script ausgeführt das die Urlaubsbilder einliest und in die HTMLGalerieVorlage einbindet.

              "MeineGalerie/MeineMalereien"

              Das Liest dann Malereien aus der Datenbank und bindet die in die HTMLGalerieVorlage ein.

              Also ich bestimme über die URL schlicht den Inhalt der Seite.
              Das ist doch nichts ungewöhnliches, oder?

              Aber ich dachte immer eine Abstraktion ist die Wirklichkeit in ein Objekt hineingepackt,

              Ok, dann hoer jetzt bitte auf, das zu denken. :-)

              Ok, ich versuchs, aber alte Gewohnheiten schleift man meist noch lange hinter sich her... :-)

              Eine Abstraktion ist... ich versuchs mal: das Erstellen von Code (seien es Funktionen, Klassen, ...), der nicht nur eine ganz konkrete Aufgabe erfuellt, sondern so gestaltet ist, dass er flexibel fuer verschiedene, artverwandte Probleme eingesetzt werden kann.

              Mal ein ganz einfaches Beispiel:
              Stell Dir eine Email-Klasse vor, mit der Du aus Deinen PHP-Skripten heraus automatisch Emails versenden kannst, etwa an Kunden. (Oder auch eine Email-Funktion, was geht hier jetzt nicht um Klassen an sich).

              Dann moechtest Du vielleictht, dass beim Abschicken der Email automatisch ein Email-Kopf mit Deinem Logo o.ae. eingebunden wird. Jetzt waere es schlecht, wenn der Email-Kopf hart kodiert in der Funktion steht, in der Art

              $emailText = "<h1>www.example.com - automatische Email</h1>" . $emailText;

              Dann kannst Du die Funktion naemlich nicht mehr gebrauchen, wenn Du

              • entscheidest, auf Plaintext-Emails umzusteigen (was wuenschenswert waere),
              • noch ne Website erstellst und von dort auch Emails verschicken willst, ohne diesen Header,
              • Dein Logo aenderst.

              Hmm, ok, ich befürchte da muss ich mich erst schlau machen was Plaintext ist, und wie E-Mails überhaupt aufgebaut sind.

              Solche Dinge sollten aber nicht dazu fuehren, dass Du Deinen Programm-Code an 37 Stellen aendern musst. Also: Deine Email-Klasse sollte

              • Dir erlauben, den Mime Type (text oder html) als Parameter zu setzen
              • einen HTML-Kopf als Template einlesen, wenn gewuenscht

              damit Du bis in alle Ewigkeit alle Deine Emails mit dieser Klasse, d.h. demselben Programm-Code, versenden kannst und lediglich andere Templates zur Verfuegung stellen oder vielleicht noch ein paar Konstanten aendern musst.

              Das waere eine Abstraktion. Code unabhaengig von konkreten Umgebungsbedingungen schreiben.

              Ok.

              Das true am Ende bedeutet nur das eben genau diese URL jetzt gültig ist, bzw. aufgerufen wird.

              *wurde*, nicht wird (und: ein URL, also ein *String*, s.o.), wird nicht aufgerufen). Der Client hat mittels des URL die Ressource aufgerufen/angefordert, der Server hat das PHP-Skript gestartet. Alles laengst geschehen, alles ist in geordneten Bahnen. Wozu musst Du das jetzt extra im Skript behandeln?

              Wegen diesen einzelnen Scriptaufrufen, die Parameter der URL bestimmen den Seiteninhalt (URL-Parameter = Das Zeuch zwischen den / - k.a. wie man die nennt :-) )

              Das ist die URL die vom Cliet kommt. Ich wollte aber versuchen das Skript unabhängig davon, von wo der Aufruf kommt zu gestalten. So das es am Ende von PHP, Client via User oder AJAX aufgerufen werden kann. Eben fast wie eine Funktion :-)

              Ok.

              Also das ganze soll dann so funktionieren das ich im PHP ein Objekt habe das alle aufrufbaren Seiten enthält.

              Mein oben erzeugtes Objekt wird dann mit dem "Systemobjekt" verglichen, ob es die aufgerufene Webseite dort überhaupt existiert.
              Tut sie das, wird die Seite aufgerufen und alle notwendigen PHP-Skripte dazu ebenfalls.
              Existiert die aufgerufene Seite nicht, dann kommt eben ne 404-Seite.

              Verstehe ich nicht. Das erledigt der Server doch fuer Dich, oder nicht? Er ruft das fuer die angeforderte Seite passende Skript auf. Sonst haettest Du edn URL ja nicht in der _SERVER-Variable zur Verfuegung.

              Hmm, ok, ich habe das immer über htaccess gemacht, hab erst jetzt realisiert das, dass auch in $_SERVER drinnen steht.

              Hast du eventuell einen Tipp wie man das besser lösen / gestalten könnte?

              Was denn jetzt eigentlich? :-)

              Meine Sache mit der dollen Galerie und dem Blog :-)

              Ich hab keine Ahnung, wie Du es bisher loest. Das, was wir hier besprochen haben, hat weder mit ner Galerie noch mit nem Blog irgendwas zu tun. Oder?

              Ich befürchte ich muss die Sache eh nochmal neu überdenken. Von daher sind da wohl weitere Überlegungen in diese Richtung eher verwirrend :-(

              Hör mal, um das schöne selfhtml-Forum nicht durch Grundsatzdebatten zu verschandeln (Was ich befürchte was wir nachdem du diesen Beitrag gelesen hast tun werden :-) ), wollen wir nicht via ICQ, Mail oder irgendwas anderes uns verständigen?

              Lass uns ruhig hier bleiben, fuer Diskussionen ist das Forum doch da.

              Ok, wie du meinst.

              Vielen lieben Danke übrigens für deine engelsgleiche Geduld :-)
              Ich habe hier auch noch einmal ein bisschen was ausfürchlicher gechrieben: http://forum.de.selfhtml.org/?t=202100&m=1365269

              Viele Gruesse,
              der Bademeister

      2. Hi!

        Also bringen soll es mir ein Objekt das die URL-Angabe repräsentiert.
        Wenn ich als URL habe:
        http://irgendwas.de/MeinBlog/2010/12/3

        Wollte ich die in ein Objekt:
        $MeinBlog->2010->12->3 = true;
        abstrahieren.

        Das sieht mir gar nicht sinnvoll aus. 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.

        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. Du müsstest umständlich rekursiv durch dein geschachteltes Objekt wandern.

        Mit diesem Vorhaben, denke ich, handelst du dir mehr Probleme ein, als es was bringt.

        Ich wollte hier mit einem Objekt arbeiten weil ich mal gehört habe das es wohl ein guter Stil sei eben mit Objekten als mit allem anderen zu arbeiten. Eben nach dem Motto: Soviel abstrahieren wie es nur geht.

        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. Außerdem sollte alles mit Bedacht geschehen. Auch das, was anderenorts bester Stil ist, muss das nicht überall sein.

        PHP mache ich nur Hobbymässig, und das meiste davon eigne ich mir selber an. Von gutem Programmierstil weiß ich da leider nicht viel, sry :-(

        Dafür musst du dich nicht entschuldigen. Nichtwissen sehe ich nicht als Makel an, auch nicht, wenn man sich deswegen solche komischen Lösungen auszudenken versucht. Wichtig ist nur, dass du aus deinen Fehlern zu lernen bereit bist.

        Hast du eventuell einen Tipp wie man das besser lösen / gestalten könnte?

        Lass es beim Array, wenn du den Pfad überhaupt aufdröseln musst. Wenn die Einzelteile zum Beispiel nur ein einziges Mal benötigt werden, würde ich nur an dieser Stelle mit dem explode()-Egebnis arbeiten und ansonsten den String bestehen lassen.

        Lo!

        1. Hi!

          Also bringen soll es mir ein Objekt das die URL-Angabe repräsentiert.
          Wenn ich als URL habe:
          http://irgendwas.de/MeinBlog/2010/12/3

          Wollte ich die in ein Objekt:
          $MeinBlog->2010->12->3 = true;
          abstrahieren.

          Das sieht mir gar nicht sinnvoll aus. 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? :-)

          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. Du müsstest umständlich rekursiv durch dein geschachteltes Objekt wandern.

          Aber ich habe doch eine Variable:

          $url = $_GET["side"];  
            
          [code lang=php]$sides = explode("/",$url);
          ~~~[/code]  
            
          Dann habe ich doch meinen URL-String und mein Array :-)  
          implode() brauche ich dann doch nicht mehr, oder?  
            
          
          > Mit diesem Vorhaben, denke ich, handelst du dir mehr Probleme ein, als es was bringt.  
          >   
          > > Ich wollte hier mit einem Objekt arbeiten weil ich mal gehört habe das es wohl ein guter Stil sei eben mit Objekten als mit allem anderen zu arbeiten. Eben nach dem Motto: Soviel abstrahieren wie es nur geht.  
          >   
          > 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. Außerdem sollte alles mit Bedacht geschehen. Auch das, was anderenorts bester Stil ist, muss das nicht überall sein.  
          >   
          
          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.  
            
          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.  
            
          
          > > PHP mache ich nur Hobbymässig, und das meiste davon eigne ich mir selber an. Von gutem Programmierstil weiß ich da leider nicht viel, sry :-(  
          >   
          > Dafür musst du dich nicht entschuldigen. Nichtwissen sehe ich nicht als Makel an, auch nicht, wenn man sich deswegen solche komischen Lösungen auszudenken versucht. Wichtig ist nur, dass du aus deinen Fehlern zu lernen bereit bist.  
          
          »»  
          Bereit dazu bin ich ja, aber im Moment ist es echt schwer :-(  
          Ich bin echt bissl verwirrt was den Umgang mit Objekten angeht.  
          
          > > Hast du eventuell einen Tipp wie man das besser lösen / gestalten könnte?  
          >   
          > Lass es beim Array, wenn du den Pfad überhaupt aufdröseln musst. Wenn die Einzelteile zum Beispiel nur ein einziges Mal benötigt werden, würde ich nur an dieser Stelle mit dem explode()-Egebnis arbeiten und ansonsten den String bestehen lassen.  
          >   
          >   
          
          Also soll ich diese Abstraktion lassen. Ne Webseite kann man ja auch abstrahieren, die hat ja auch logisch betrachtet Eigenschaften und Methoden.  
            
          Also bspw.  
            
          `$MeineWebseite->RufeSeiteAuf("Galerie/Anzeigen");`{:.language-php}  
            
          widerspricht doch eigentlich nicht dem abstrahieren, oder?  
            
          Es gibt ja auch überall in Büchern als Beispiel:  
            
          ~~~php
          $MeinAuto = new $Car  
          $MeinAuto->SetColor("Rot");
          

          Im Prinzip mache ich ja nichts anderes mit meiner Webseite, oder?

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

          Lo!

          1. 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!

            1. Ok, also ich fasse zusammen:

              Der falsche Weg:

              // Aus URL zusammengebaut  
              $SeitenMeinerWebseite->MeineGalerie->MeineUrlaubsbilder = true;  
                
              if($SeitenMeinerWebseite->MeineGalerie->MeineUrlaubsbilder)  
              {  
                require_once("BilderinfosAusDatenbankHolen.php");  
                require_once("HTMLVorlageFuerDieGalerieEinbinden.php");  
                require_once("DatenbankinfosUndVorlageZusammenfuehren.php");  
                require_once("VorlageMitGeneriertenDatenAusgeben.php");  
              }  
              else  
              {  
                require_once("HTMLVorlageFuerVolltextSucheEinbinden.php");  
                require_once("VorlageMitGeneriertenDatenAusgeben.php");  
              }
              

              Der richtige Weg:

              // String aus $_SERVER geholt  
              $MeineAufgerufeneSeite = "MeineWebseite/MeineGalerie/MeineUrlaubsbilder";  
                
              if($MeineAufgerufeneSeite == "MeineWebseite/MeineGalerie/MeineUrlaubsbilder")  
              {  
                require_once("BilderinfosAusDatenbankHolen.php");  
                require_once("HTMLVorlageFuerDieGalerieEinbinden.php");  
                require_once("DatenbankinfosUndVorlageZusammenfuehren.php");  
                require_once("VorlageMitGeneriertenDatenAusgeben.php");  
              }  
              else  
              {  
                require_once("HTMLVorlageFuerVolltextSucheUeberGanzeWebseiteEinbinden.php");  
                require_once("VorlageMitGeneriertenDatenAusgeben.php");  
              }
              

              Wäre an dieser Stelle auch folgender Code richtig?

                
              $MeineWebseite = new cWebseite();  
                
              // legt eine Liste aller aufrufbaren Unterseiten meiner Webseite an. Die Liste ist eine private Variable in der Klasse, meinetwegen ein Array  
              $MeineWebseite->AufrufbareWebseiteHinzufuegen("MeineWebseite/MeineGalerie/MeineUrlaubsbilder");  
              $MeineWebseite->AufrufbareWebseiteHinzufuegen("MeineWebseite/MeinBlog");  
              ...  
                
              // Sagt der Klasse welche Seite nun aufgerufen wurde, schaut in der klasseninternen Variable, in welcher alle möglichen Seiten drinnen sind nach ob diese Seite existiert und erzeugt die Seite dann wie bei "Der richtige Weg" beschrieben, oder gibt eben ne Fehlerseite mit einer Volltextsuche zurück. Rückgabewert ist in jedemfall ein String mit der gesamten Webseite.  
              echo $MeineWebseite->get_Webseite("MeineWebseite/MeineGalerie/MeineUrlaubsbilder");
              

              Oder ist das schon wieder der falsche Ansatz, wenn ich versuche zu abstrahieren, ich meine die Klasse ist ja verallgemeinert, man kann beliebige Unterseiten hinzufügen.
              Und diese dann mittels der get-Methode aufrufen.

              Man müsste halt in der GET-Methode für jede existierende Webseite einen Fall via switch / case oder ifelse definieren, der die notwendigen Scripte zur Erstellung der übergebenen Webseite aufruft.

              Zu deiner Fragen:

              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?

              $url ist kürzer. Und selbst als Programmierguru müsstest du doch trotzdem als Mensch zugeben das man sich kürzere Sachen besser merken kann als längere, oder?
              Ich dachte mir das es den Quelltext leichter verständlich macht. Das war zumindest meine Intention :-)
              Aber da du so fragst ist das mal wieder grundlegend falsch, was? :-(

              Zu meinem Anfangsproblem:

              Da es sich wohl um ein Grundsatzproblem handelt werde ich wohl alles nochmal neu überdenken müssen.
              Ich gehe mal davon aus das es unabhängig von dem Grad der Sinnvollkeit wohl so auch nicht möglich ist ein eindimensionales Array in ein mehrdimensionales Array zu konvertieren, zumal du ja sagtest das die Begrifflichkeiten hier fehl am Platze und auf Objekte garnicht anwendbar sind.

              Ich wollte mich noch bedanken, dafür das du dir so viel Zeit nimmst :-)

              1. Hi!

                Oder ist das schon wieder der falsche Ansatz, wenn ich versuche zu abstrahieren, ich meine die Klasse ist ja verallgemeinert, man kann beliebige Unterseiten hinzufügen.
                Und diese dann mittels der get-Methode aufrufen.

                So sieht das zumindest vernünftiger aus. Daten werden als solche behandelt und sind nicht der Code selbst. Was war eigentlich der Grund, warum du den Objekt-Versuch gestartet hast? Brauchst du die einzelnen Bestandteile des Pfades für irgendetwas oder hast du die nur des Objekts wegen aufgeteilt?

                Man müsste halt in der GET-Methode für jede existierende Webseite einen Fall via switch / case oder ifelse definieren, der die notwendigen Scripte zur Erstellung der übergebenen Webseite aufruft.

                Das kommt drauf an, ob man nicht die Daten direkt weiterverarbeiten kann. Man kann beispielsweise zunächst alle erlaubten Webseiten in einem Array auflisten, dann den übergebenen Wert auf Vorhandensein in diesem Array prüfen und anschließend daraus direkt oder indirekt einen Dateinamen generieren.

                Indirekt ginge das mit so einer Datenstruktur:

                $array('webseite1' => 'template1.tmpl',
                         'webseite2' => 'template2.tmpl');

                Beim direkten Verwenden ist das Prüfen gegen das Array (oder eine vergleichbar sichere Maßnahme) wichtig, damit nicht irgendeine beliebige Datei aufgrufen werden kann.

                Zu deiner Fragen:

                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?

                $url ist kürzer. Und selbst als Programmierguru müsstest du doch trotzdem als Mensch zugeben das man sich kürzere Sachen besser merken kann als längere, oder?

                Es ist zwar kürzer zu tippen, aber nun musst du dir zusätzlich merken, wo $url herkommt. Einem $_GET/$_POST sieht man das sofort an. Mitunter ist bei manchen das Umkopieren auch derart Gewohnheit geworden, dass sie gar nicht mehr merken, dass die neue Variable nur ein- oder zweimal verwendet wird und damit das Notieren des Codes für das Umkopieren aufwendiger als eine direkte Verwendung war.

                Ich dachte mir das es den Quelltext leichter verständlich macht. Das war zumindest meine Intention :-)
                Aber da du so fragst ist das mal wieder grundlegend falsch, was? :-(

                Grundlegend falsch würde ich das nicht bezeichnen, nur komplexer wegen der zusätzlichen Variablen.

                Da es sich wohl um ein Grundsatzproblem handelt werde ich wohl alles nochmal neu überdenken müssen.
                Ich gehe mal davon aus das es unabhängig von dem Grad der Sinnvollkeit wohl so auch nicht möglich ist ein eindimensionales Array in ein mehrdimensionales Array zu konvertieren, zumal du ja sagtest das die Begrifflichkeiten hier fehl am Platze und auf Objekte garnicht anwendbar sind.

                Du solltest dich dabei immer fragen, was der Nutzen der Handlung ist und was die möglichen Nachteile sind. Nicht immer wirst du das wissen und dann auch mal in die falsche Richtung rennen. Das ist zwar ärgerlich, gehört aber zum Lernprozess dazu.

                Man kann den Begriff "mehrdimensionales Array" durchaus verwenden, dann aber bitte nicht für eine baumstrukturartige Datensammlung, sondern eher für mathematischen Dinge wie Matrizen oder das Spielfeld von 3D-4gewinnt und dergleichen, also Gebilde, die sich in jeder Richtung/Dimension gleichmäßig erstrecken.

                Lo!

                1. Hi!

                  Oder ist das schon wieder der falsche Ansatz, wenn ich versuche zu abstrahieren, ich meine die Klasse ist ja verallgemeinert, man kann beliebige Unterseiten hinzufügen.
                  Und diese dann mittels der get-Methode aufrufen.

                  So sieht das zumindest vernünftiger aus. Daten werden als solche behandelt und sind nicht der Code selbst. Was war eigentlich der Grund, warum du den Objekt-Versuch gestartet hast? Brauchst du die einzelnen Bestandteile des Pfades für irgendetwas oder hast du die nur des Objekts wegen aufgeteilt?

                  Naja, ich wollte eben für jeden Pfadbestandteil ein eigenes Script starten. Also wenn im Objekt der Schlüssel "Galerie" steht, dann wird auch das Galeriescript gestartet. Das lädt die HTMLGalerieVorlage, dann kommt meinetwegen "Illustrationen" als nächster Unterschlüssel und damit wird auch das Script aufgerufen das die Vorlage für Illustrationen einbindet. Und so schachtelt sich das immer weiter bis zur fertigen Webseite :-)

                  Man müsste halt in der GET-Methode für jede existierende Webseite einen Fall via switch / case oder ifelse definieren, der die notwendigen Scripte zur Erstellung der übergebenen Webseite aufruft.

                  Das kommt drauf an, ob man nicht die Daten direkt weiterverarbeiten kann. Man kann beispielsweise zunächst alle erlaubten Webseiten in einem Array auflisten, dann den übergebenen Wert auf Vorhandensein in diesem Array prüfen und anschließend daraus direkt oder indirekt einen Dateinamen generieren.

                  Indirekt ginge das mit so einer Datenstruktur:

                  $array('webseite1' => 'template1.tmpl',
                           'webseite2' => 'template2.tmpl');

                  Beim direkten Verwenden ist das Prüfen gegen das Array (oder eine vergleichbar sichere Maßnahme) wichtig, damit nicht irgendeine beliebige Datei aufgrufen werden kann.

                  Zu deiner Fragen:

                  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?

                  $url ist kürzer. Und selbst als Programmierguru müsstest du doch trotzdem als Mensch zugeben das man sich kürzere Sachen besser merken kann als längere, oder?

                  Es ist zwar kürzer zu tippen, aber nun musst du dir zusätzlich merken, wo $url herkommt. Einem $_GET/$_POST sieht man das sofort an. Mitunter ist bei manchen das Umkopieren auch derart Gewohnheit geworden, dass sie gar nicht mehr merken, dass die neue Variable nur ein- oder zweimal verwendet wird und damit das Notieren des Codes für das Umkopieren aufwendiger als eine direkte Verwendung war.

                  Ich habe auch mal irgendwo gesehen das einer $_POST via Funktion in ein Objekt gewandelt hat. Aus $_POST["side"] wurde dann z.B. $post->side.
                  Begründung dazu: Objekte zu verwende ist einfach edler - :-P

                  Ist wohl echt ne Geschmackssache, k.a. wieso es da unterschiedliche Standpunkte gibt.

                  Ich dachte mir das es den Quelltext leichter verständlich macht. Das war zumindest meine Intention :-)
                  Aber da du so fragst ist das mal wieder grundlegend falsch, was? :-(

                  Grundlegend falsch würde ich das nicht bezeichnen, nur komplexer wegen der zusätzlichen Variablen.

                  Hmm, da wäre dann wohl sowas wie $get->url besser zum nachvollziehen, nur nimmt sich das dann nix mehr mit $_GET["side"] was den Schreibaufwand angeht :-)

                  Da es sich wohl um ein Grundsatzproblem handelt werde ich wohl alles nochmal neu überdenken müssen.
                  Ich gehe mal davon aus das es unabhängig von dem Grad der Sinnvollkeit wohl so auch nicht möglich ist ein eindimensionales Array in ein mehrdimensionales Array zu konvertieren, zumal du ja sagtest das die Begrifflichkeiten hier fehl am Platze und auf Objekte garnicht anwendbar sind.

                  Du solltest dich dabei immer fragen, was der Nutzen der Handlung ist und was die möglichen Nachteile sind. Nicht immer wirst du das wissen und dann auch mal in die falsche Richtung rennen. Das ist zwar ärgerlich, gehört aber zum Lernprozess dazu.

                  Man kann den Begriff "mehrdimensionales Array" durchaus verwenden, dann aber bitte nicht für eine baumstrukturartige Datensammlung, sondern eher für mathematischen Dinge wie Matrizen oder das Spielfeld von 3D-4gewinnt und dergleichen, also Gebilde, die sich in jeder Richtung/Dimension gleichmäßig erstrecken.

                  Das hört sich so an als ob du von C / C++ und solchen Compilersprachen sprichst. Ich glaube da gab es mehrdimensionale Arrays mit jeweils unterschiedlichen Längen nicht, gell?

                  Lo!

                  Was bedeutet eigentlich "Lo!"? ^^

                  1. Bzw. ich zeige dir mal was ich eigentlich vor habe in Code ausgedrückt:

                      
                    $MyWebside->Galerie = "Galerie"  
                    $MyWebside->Galerie->Illustrationen = "Galerie/Illustrationen";  
                    $Mywebside->Galerie->Illustrationen->hochladen = "Galerie/Illustrationen/hochladen"  
                    $Mywebside->Galerie->Illustrationen->anzeigen = "Galerie/Illustrationen/anzeigen"  
                    $Mywebside->Galerie->Illustrationen->bearbeiten = "Galerie/Illustrationen/bearbeiten"  
                    $Mywebside->Galerie->Fotos->hochladen = "Galerie/Fotos/hochladen"  
                    $Mywebside->Galerie->Fotos->anzeigen = "Galerie/Fotos/anzeigen"  
                    $Mywebside->Galerie->Fotos->bearbeiten = "Galerie/Fotos/bearbeiten"
                    

                    Ich wollte eben irgendwie fest verankern welche aufrufbaren Seiten existieren.
                    Das könnte in Bezug auf eine andere Webseite auch so ausschauen:

                    $Mywebside->Galerie->Fotos->anzeigen = "NUTZERNAME/oeffentlich/galerie/anzeigen/fotos";

                    Wenn sich also mal aus irgendwelchen Gründen die Pfadangabe ändern sollte, funktioniert mein Code trotzdem immer noch, weil meine Variable ja immer noch die selbe ist :-)

                    Das war so nen bisschen der Kerngedanke.
                    Das ich eben meine Webseite logisch in ein Objekt nachbilde.

                    Ich habe mir also überlegt was meine Webseite so alles können soll.

                    Sie soll auf jedenfall eine Galerie enthalten, deswegen also:

                      
                    $MeineWebseite->Galerie;
                    

                    Was kann meine Galerie alles? Sie unterscheidet zunächst mal zwischen Illustrationen und Fotos, deswegen also:

                      
                    $MeineWebseite->Galerie->Illustrationen;  
                    $MeineWebseite->Galerie->Fotos;
                    

                    Tja und Fotos muss ich ja auch hochladen können, deswegen:

                    $MeineWebseite->Galerie->Fotos->hochladen;

                    wobei hierbei ja das Hochladen eine Methode ist, eine Funktion der Illustrationen in der Galerie.

                      
                    $MeineWebseite->Galerie->Fotos->hochladen($file);
                    

                    wäre also besser. Usw., usw.
                    So hatte ich mir das ursprünglich gedacht. Ich dachte eben das gestaltet das ganze übersichtlicher, besser als wenn ich ein riesiges PHP-Script habe das vollgepack ist mit Kontrollstrukturen die jeden einzelnen Fall abfangen, also eben ein typisches Script das von oben nach unten einmal durchläuft.
                    Ich dachte so bringe ich auch etwas Struktur rein :-)

                    Weil du fragtest was ich eigentlich bezwecken wollte.

                    1. Hi!

                      Bzw. ich zeige dir mal was ich eigentlich vor habe in Code ausgedrückt:
                      [...]
                      $Mywebside->Galerie->Fotos->bearbeiten = "Galerie/Fotos/bearbeiten"
                      Ich wollte eben irgendwie fest verankern welche aufrufbaren Seiten existieren.

                      Warum schreibst du das nicht in ein einfaches Array?

                      $Mywebside = array();
                      [...]
                      $Mywebside[] = "Galerie/Fotos/bearbeiten";

                      Das war so nen bisschen der Kerngedanke.
                      Das ich eben meine Webseite logisch in ein Objekt nachbilde.

                      Aber du hast das noch nicht (zumindest mal im Kleinen) umgesetzt, um zu probieren, wie sich diese Objekte nun weiterverarbeiten lassen, stimmts? Wenn du Zeit und Lust hast, kannst du das ja mal spaßeshalber machen, um ein Gefühl zu bekommen, ob diese Idee gut war oder ob sie nur weitere Folgeprobleme nach sich zieht (so wie ich das vermute).

                      Was kann meine Galerie alles? Sie unterscheidet zunächst mal zwischen Illustrationen und Fotos, deswegen also:

                      Sind Illustrationen und Fotos aus Programmsicht verschiedene Dinge mit unterschiedlichen Eigenschaften? Oder ist das einfach nur ein Ordnungskriterium und somit "Illustrationen" und "Fotos" nur Werte einer Eigenschaft der Galerie namens "Bildtyp"?

                      $MeineWebseite->Galerie->Illustrationen;

                      $MeineWebseite->Galerie->Fotos;

                        
                      Wenn objektorientiert, dann müsstest du erst einmal abstrahieren und daraus Klassen erstellen. Du hingegen erstellst aus PHPs Default-Klasse (stdClass) einfach einen geschachtelten Objektbaum. Ich versuch mich mal an einem Szenario:  
                        
                      $MeineWebseite könnte ein Objekt der Klasse Webseite werden. Diese hat neben anderen benötigten Eigenschaften eine in der ein Objekt der Klasse Bereich abgelegt wird. Das kann auch eine Klase sein, die von Bereich geeerbt hat, wenn sie für besondere Anwendungsfälle Änderungen an Eigenschaften und/oder Methoden haben soll. Eine Galerie wird auf alle Fälle anders sein, als vielleicht zwei Artikelbereiche, die zwar unterschiedliche Themen behandeln, aber ansonsten den gleichen Unterbau haben. Das heißt, die beiden Artikelbereiche sind Instanzen der selben Klasse, die Galerie eine Instanz einer anderen Klasse. Alle drei erben aber ihre Gemeinsamkeiten von der Bereichsklasse. Für die Galerie wäre es nun sinnvoll, eine Klasse für Bilder zu erstellen. Wenn du mal betrachtest, ob Illustrationen und Fotos programmtechnisch unterschiedlich behandelt werden müssen, so wirst du vermutlich feststellen, dass dies nicht der Fall sein wird. Sie unterscheiden sich nur nach ihrem Inhalt (so wie zum Beispiel zwei Fotos auch), haben aber ansonsten die gleichen Eigenschaften und benötigen die gleichen Methoden. Wenn sie sich doch unterscheiden, dann haben sie zumindest viele Gemeinsamkeiten, die man in einer Basisklasse unterbringen kann.  
                        
                      
                      > Tja und Fotos muss ich ja auch hochladen können, deswegen:  
                      > `$MeineWebseite->Galerie->Fotos->hochladen;`{:.language-php}  
                      > wobei hierbei ja das Hochladen eine Methode ist, eine Funktion der Illustrationen in der Galerie.  
                        
                      Hochladen ist eine Funktionalität, die sich im Grunde zwischen den einzelnen Anwendungsbereichen strukturell nicht unterscheidet. Es ist egal, ob du Fotos, Illustrationen, Musikdateien oder Videos hochlädst. Der Ablageordner wird ein anderer sein, aber das ist dann ein variabler Wert, der dem Objekt der Klasse Hochlader bei der Instantiierung mitgegeben wird. Somit stelle sich heraus, dass die Upload-Funktionalität potentiell in allen Bereichen zum Einsatz kommen kann. Es wäre also geschickt, sie eigenständig zu implementieren und nicht nur als eine Funktionalität der Galerie. Ihre Arbeit wird dann von den einzelnen Bereichen in Anspruch genommen.  
                        
                      
                      > So hatte ich mir das ursprünglich gedacht. Ich dachte eben das gestaltet das ganze übersichtlicher, besser als wenn ich ein riesiges PHP-Script habe das vollgepack ist mit Kontrollstrukturen die jeden einzelnen Fall abfangen, also eben ein typisches Script das von oben nach unten einmal durchläuft.  
                        
                      Du kannst dir die Einzelfallbehandlung nur dann ersparen, wenn du einen Algorithmus implementiertst, der aufgrund von Gesetzmäßigkeiten das Ziel findet. Der einfachste Fall wäre, wenn es ein flaches Array gäbe, deren Keys den aufrufbaren URLs entspricht. Die Werte verweisen auf etwas, das sich um die Erledigung kümmert. Das geht aber nur mit einer festen Seitenstruktur. Für ein Blog, bei dem ständig Beiträge hinzukommen, ist es ungünstig, wenn dazu jedes Mal dieses Array geändert werden müsste. Da kannst du nur den Algorithmus verfeinern, so dass er erst einmal grundlegend erkennt, dass ein Blogbeitrag gewünscht ist, und dann den Namen des Artikel behandelt. Und wenn du Kommentare zulässt, musst du auch noch auswerten, ob jemand gerade einen solchen zu einem Artikel abgeben will. Die Artikelverwaltung wird vermutlich in einem Adminbereich stecken, nicht in dem Blogteil, der sich um die Besucher kümmert.  
                        
                        
                      Lo!
                      
                  2. Hi!

                    Naja, ich wollte eben für jeden Pfadbestandteil ein eigenes Script starten.

                    Das sieht nicht gerade abstrahiert aus. Wenn jede Seite ihr eigenes Script hat, dann ist das nciht abstrakt sondern konkret. Abstrakt wird es dann erst an der Stelle, wenn die konkrete Seite, nachdem sie ein paar Variablen mit Nutzdaten gefüllt hat, diese an ein Template übergibt, das sich um das Rendern kümmert.

                    Ich habe auch mal irgendwo gesehen das einer $_POST via Funktion in ein Objekt gewandelt hat. Aus $_POST["side"] wurde dann z.B. $post->side.
                    Begründung dazu: Objekte zu verwende ist einfach edler - :-P

                    Ziemlich unsinniger Aufwand, wenn du mich fragst. Ich seh da keinen Vorteil drin, eher noch den Nachteil, dass die eigene Variable nun nicht mehr superglobal ist.

                    Ist wohl echt ne Geschmackssache, k.a. wieso es da unterschiedliche Standpunkte gibt.

                    Vielleicht weil es dieser Jemand als schick erachtet hat und bisher noch keine Erfahrungen zu den Konsequenzen gesammelt hat.

                    Man kann den Begriff "mehrdimensionales Array" durchaus verwenden, dann aber bitte nicht für eine baumstrukturartige Datensammlung, sondern eher für mathematischen Dinge wie Matrizen oder das Spielfeld von 3D-4gewinnt und dergleichen, also Gebilde, die sich in jeder Richtung/Dimension gleichmäßig erstrecken.
                    Das hört sich so an als ob du von C / C++ und solchen Compilersprachen sprichst. Ich glaube da gab es mehrdimensionale Arrays mit jeweils unterschiedlichen Längen nicht, gell?

                    Jein. Herkömmliche Arrays sind linear aufgebaut. Die Elemente werden über lückenlos auf(oder ab)steigende Schlüsselwerte angesprochen. Man kann jederzeit anhand der Startposition im Speicher und dem Produkt aus Elementgröße und der Differenz des Schlüssels zu dem des Startelements die Position bestimmen. Das geht auch bei echten mehrdimensionalen Arrays, da kommen dann noch die weiteren Richtungen mit ins Produkt.

                    Für Strukturen, die nicht mehr mit diesem streng gleichmäßigen Gebilde erstellt werden können, verwendet man spezielle Elemente, die dann auch einen eigenen Namen haben, wie Collection, Dictionary, Stack, hastenichgesehen. PHP hat viele dieser Spezialformen zu vereinen versucht, und es dann trotzdem Array genannt. (Siehe Einleitung zum Typ Array.) Im Grunde genommen ist ein PHP-Array nicht mal ein Array im herkömmlichen Sinne. Man kann es jedoch wie ein solches verwenden, aber eben auch wie eine der anderen Strukturen, sogar ähnlich wie ein mehrdimensionales Array. Aber wenn du genau hinsiehst, ist es "nur" ein PHP-Array of PHP-Arrays - mit all seinen Möglichkeiten und Konsequenzen, wie beispielsweise dem Entfernen von Elementen von beliebigen Positionen.

                    Lo!
                    Was bedeutet eigentlich "Lo!"? ^^

                    Ach, das ist nur das Gegenstück zu dem Ding da oben. Ansonsten hat es keine weitere von mir beabsichtigte Bedeutung.

                    Lo!