dynamisches Binden

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

  • dynamisches Binden

    Hallo,

    ich habe ein Problem beim dynamsichen Binden. Und zwar habe ich ein PHP Klasse erstellt, welche durch verschiedene Aufrufe und Ereignsisse sich verändert. Nun zu meiner Frage. Ist es in PHP nicht möglich, dass dynamisch includiert werden kann.

    Bsp.:

    case ".rdf";
    include("include/Output_resources.php");
    $this->AusgabeRDF(basename($path));
    break;
    case ".csv";
    include("include/Output_classes.php");
    $this->AusgabeCSV(basename($path));
    break;


    aus dieser Switch anweiseung findet php die Ausgabefuntkionen nicht. Ich möchte an dieser Stelle nicht den vollständigen Inhalt der Methoden aufschreiben - zum einen weil das unübersichtlich wird und zum anderen dem Verständnis nicht beträgt.

    nic

  • #2
    aus dieser Switch anweiseung findet php die Ausgabefuntkionen nicht.
    bist du sicher, dass innerhalb der Klasse PHP die Methoe nicht findet? oder liegt es eher daran, dass die Variable $path nicht durchgereicht ist und die Methode ohne vernünftige Fehlerabfang ausgestiegen war?

    Kommentar


    • #3
      Re: dynamisches Binden

      Anstatt da selbst was zu baszteln, solltest du dich vielleicht eher mit AutoLoading beschäftigen.
      http://www.php.net/manual/de/language.oop5.autoload.php
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        @asp2php

        die Fehlermeldung:

        <br />
        <b>Fatal error</b>: Call to undefined method HTTP_WebDAV_Server_RDF::AusgabeN3() in <b>/var/www/localhost/htdocs/webdav/RDF.php</b> on line <b>452</b><br />

        daraus schieße ich, das die Methode nicht gefunden wird. d.h. beim erzeugen eines Objektes der Klasse HTTP_WebDAV_Server_RDF existiert die Methode AusgabeN3 noch nicht,bzw. ist nicht im Quellcode verfügbar. Somit findet beim Aufruf in der Switchanweisung der Call nicht statt.

        Mit dem Autoload kann ich nun aber nur Klassen dynamisch einbinden. Dies ist aber etwas Overhead meines Erachtens, weil diese Datei bloß eine Funktion enthält.

        Ich habe sie deshalb ausgelagert, weil ich diese Ausgabe noch mehrfach im weiteren Verlauf verwenden will und nicht jedesmal den gesamten Codeblock einfügen kann.

        Kommentar


        • #5
          Hi,

          es wäre wichtig zu wissen wie genau du deine klasse mit dem
          entsprechenden outputalgo dekorierst, damit man dazu was sagen kann.
          Du greifst ja direkt unter dem include via $this auf instanz deiner klasse
          zu. Das heisst zu diesem zeitpunkt muss die entsprechende outputmethodik
          bereits verfügbar sein. Wo genau machst du diesen schritt? Ich nehme mal
          an du lässt das ganze über ne fabrik laufen?

          greets

          OffTopic:

          Vorsicht mit der begriffswahl. Ich (als alter c++ programmierer) verstehe unter
          "dynamischem binden" etwas völlig anderes.

          (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

          Kommentar


          • #6
            kann es sein, dass du deine Funktion bzw. Variable erst noch mit "global" bekannt machen musst? Das Problem hatte ich beim includen von Funktionen auch schon ein paar mal.
            it's not a bug,
            it's a feature!

            Kommentar


            • #7
              Original geschrieben von nic_12
              daraus schieße ich, das die Methode nicht gefunden wird. d.h. beim erzeugen eines Objektes der Klasse HTTP_WebDAV_Server_RDF existiert die Methode AusgabeN3 noch nicht,bzw. ist nicht im Quellcode verfügbar. Somit findet beim Aufruf in der Switchanweisung der Call nicht statt.
              hi, du kannst klassen-methoden nicht dynamisch inkludieren, normale funktionen aber schon. also einfach ohne schlüsselwort $this-> aufrufen.
              PHP-Code:
              case ".rdf":
              include(
              "include/Output_resources.php");
              AusgabeRDF(basename($path)); // ohne $this->
              break; 
              Mit dem Autoload kann ich nun aber nur Klassen dynamisch einbinden. Dies ist aber etwas Overhead meines Erachtens, weil diese Datei bloß eine Funktion enthält.
              so würde ich es aber trotzdem machen. die OutputHelper-objekte implementieren alle ein interface mit der methode output() welches dann aufgerufen wird, das ganze wird dann von __call() in der hauptklasse aufgerufen.

              [edit]gerade erst gesehen, hinter case kommt ein : und kein ;
              Zuletzt geändert von 3DMax; 29.01.2007, 10:58.

              Kommentar

              Lädt...
              X