Ankündigung

Einklappen
Keine Ankündigung bisher.

instanz einer classe (variable)

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    erstmal gehts mir nun auch zudem jetzt darum, dass ich diesen fehler finde, warum ich das machen möchte ist ganz klar der aufbau eines skriptes welches als normale seite eine classe anzeigen soll, zudem will ich die classen aus etlichen quellen laden, dass soll diese automatisch mit bewerkstelligen, später soll auch die instanz automatisch erzeugt werden bei der ersten nutzung der classe.

    ich will auch nicht 2 classen um eine zu steuern, ich will eine classe um ca, 9 aufwärts zu steuern, die entweder als plugins, seitenelemente oder functionen erkannt werden und umgesetzt werden.

    Kommentar


    • #17
      Schön, jetzt wissen wir also was du möchtest.
      Abgesehen von deiner etwas seltsamen Ausdrucksweise, verstehe ich allerdings nach wie vor
      nicht, warum du alle Helper-Klassen über eine einzelne Klasse laden möchtest.

      Ich denke mal, dass du ein kleines Framework für dich selbst schreiben möchtest.
      Ob nun für den Produktiveinsatz oder zum lernen ist ja egal.
      Dazu würde nicht nur ich, sondern auch alle anderen hier - speziel der Doktor - zu einer
      Lektüre raten.
      Empfehlen möchte ich nichts, PHP Design Patterns wäre aber bestimmt nicht schlecht.
      Desweiteren wird im PHPmagazin seit Ausgabe 3.07 in einer fünfteiligen Serie über
      "Patterns für den Enterprise Einsatz" gefachsimpelt.
      Dabei wird, angefangen mit dem Front Controller über RequestHelper bis zu Patterns für
      den Datenzugriff, ein MVC-Grungerüst geschaffen. Allerdings hat nicht jeder Lust und Zeit
      Bis zur Ausgabe 1.08 zu warten

      Guck dir doch vieleicht erst einmal andere populäre Frameworks an.
      CodeIgniter zum Beispiel ist gut Dokumentiert (auch im Code) und kommt als eine Art
      "erweitertes Grundgerüst" daher.

      Solten wir hier immer noch nicht das eigentliche Problem verstanden haben,
      bitte ich dich um eine gut Formulierte Problematik bzw. einen Post der ausführlich
      beschreibt was du nun genau anstellen willst.
      Eine index.php die classHanlde einbindet, und dann die Helper Klassen
      einbindet (zumindest eine Helper Klasse mit Funktionen) und dann eine Funktion
      aus einer Helper Klasse aufruft wäre passend.
      [FONT="Book Antiqua"][I]"Nobody is as smart as everybody" - Kevin Kelly[/I]
      — The best things in life aren't things[/FONT]

      Kommentar


      • #18
        das problem sollte nun verstanden sein, denke ich, es ist eben der php error der ausgespuckt ist. das buch hört sich gut an, werde ich wohl vom 1. gehalt kaufen. CodeIgniter kenne ich, finde es auch sehr gut, nur will ich für dieses spezielles projekt mein eigenes grundgerüst haben.

        ich denke man muss jedoch erstmal die treppen laufen, bevor man den aufzug benutzt, deshalb will ich den umgang der classen erstmal selber austesten.

        nochmal zurück zum 1. post dieses threads, den geschilderten PHP fehler habe ich bis jetzt nochnicht gefunden. was hat php gegen diese zeile auszusetzen ?

        Kommentar


        • #19
          Okay, wir wollen dich eigentlich nur davon abhalten vor eine Wand zu rennen.
          Leider muss das manchmal aber auch sein.
          Der Fehler liegt ganz einfach daran, dass du className mit der Zeile
          $this->className[$handle] = $class; als Array definierst. Somit muss die Zeile so aussehen:
          PHP-Code:
          $this->tempClass[$handle] = new $this->className[$handle];    # <<<< fehlerzeile 
          Typen solltest du generell bei der Deklarierung angeben oder noch besser in den
          Variablennamen schreiben.

          Etwa $aClassName, $sString, $iInteger ....
          [FONT="Book Antiqua"][I]"Nobody is as smart as everybody" - Kevin Kelly[/I]
          — The best things in life aren't things[/FONT]

          Kommentar


          • #20
            Kann man mit PHP5 schon solche Konstrukte anbieten?
            new $this->className[$handle]
            Ich dachte das erzeugt einen Parse-Error, wobei folgendes Konstrukt zumindest auch unter PHP4 funktioniert hat:
            PHP-Code:
            <?php
            $class 
            $this->irgendwas[$nochwas];
            $object = new $class;
            ?>
            Das erste Problem kommt allerdings, sobald du Parameter variabler Länge übergeben möchtest, hier kannst du nicht einmal mehr call_user_func* verwenden. Da kommen die Reflections ins Spiel.

            Was aber dein Problem zu sein scheint ist, dass du etwas irgendwo gesehen hast, aber den Vorteil eigentlich nicht erkannt hast, oder zumindest nicht gut erklären kannst.
            Natürlich macht es Sinn, dass URL-Aufrufe Klassen oder Methoden(-Aufrufe) steuern, zB eine UrlRequest() Klasse, die quasi als Vermittler fungiert.

            Dazu würde ich allerdings eine Klasse schreiben, die mir zunächst einen Request (zB von mod_rewrite erzeugt) zerlegt. Dieses Objekt würde ich dann an eine Bootstrap-Klasse weiterleiten, die mir den geeigneten Controller meines MVC-Patterns aufruft. Die UrlRequest-Klasse muss ja nicht zwingend die MVC-Struktur kennen.

            Das alles erklärt allerdings nicht, warum du ALLE Klassen in einer Helper-Klasse ablegen möchtest. Du musst ja nicht ein Problem auf deine komplette Website übertragen.

            Ich muss allerdings zugeben, dass ich deinen "Fehler" immernoch nicht verstanden/eingesehen habe. Hast du einen Parse-Error? Wenn ja, wie lautet er genau.

            Kommentar


            • #21
              Du hast es treffend formuliert, Zergling.

              Diesen Code hier, habe ich auch mal ausprobiert, funktioniert.
              PHP-Code:
              <?php

              class classHandle
              {
                  public 
              $handle;
                  public 
              $className;
                  public 
              $path;
                  
                  function 
              __construct($class,$handle=0)
                  {
                  
              $this->handle $handle;
                  
              $this->className[$handle] = $class;
                  
              #$this->path[$this->handle] = dirname(__FILE__)."\..\classes\\".$class."\\".$class.".php";
                  
              $this->path[$this->handle] = dirname(__FILE__)."\classes\\".$class."\\".$class.".php"# angepasst...
                  
              }
                  
                  function 
              load($handle=0)
                  {
                      if(
              file_exists($this->path[$handle]))
                      {        include_once(
              $this->path[$handle]);
                      
              $this->tempClass[$handle] = new $this->className;    # <<<< fehlerzeile
                      /**
                          Der Fehler:
                          Fatal error: Class name must be a valid object or a string in D:\server\projekte\test\classHandle\classHandle_array_method.php on line 21
                      **/
                      // Die Lösung: 
                      #$this->tempClass[$handle] = new $this->className[$handle]; <-- Array
                      
                      
              return true;        }
                      else
                      {        return 
              false;        }

                  }
                  
                  function 
              getVar($str,$handle=0)
                  {
                  return 
              $this->path[$handle];
                  }
                  
                  function 
              useIn($function,$handle=0)
                  {
                  if(!
              $this->tempClass[$handle]) { return false; }
                  return 
              $this->tempClass[$handle]->$function();
                  }
              }

              $test = new classHandle('testKlasse');
              $test->load();
              var_dump($test->getVar('test'));

              // Funktioniert mit korrigierter Zeile...
              ?>
              [FONT="Book Antiqua"][I]"Nobody is as smart as everybody" - Kevin Kelly[/I]
              — The best things in life aren't things[/FONT]

              Kommentar


              • #22
                Der Backslash bei Pfadangaben funktioniert übrigens nur unter Windows, wohingegen der normale Slash als Pfad-Trenner von Windows UND Linux verstanden wird. Deshalb würde ich grundsätzlich durchgehend / oder eben (wenn es die Übersicht erlaubt die PHP-Konstante DIRECTORY_SEPARATOR verwenden. Aber das nur am Rande.

                Kommentar


                • #23
                  vielen dank =)

                  Kommentar

                  Lädt...
                  X