Ankündigung

Einklappen
Keine Ankündigung bisher.

Funktionen überschreiben/löschen?!

Einklappen

Neue Werbung 2019

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

  • Funktionen überschreiben/löschen?!

    Hi,
    Ich habe ein relativ einfaches Problem aber leider keine Antwort :S...
    Also: Ich habe ein Skript in Php welches auch eine Plugin-function besitzt.
    Diese ist folgendermasen aufgebaut:
    Code:
    <?php
    ...
    //------------------------------------------
    // Load Plugins...
    //------------------------------------------
    function loadPlugins($dir, $chkstr){
    	if($dir_handler = opendir($dir)){
    		while($file = readdir($dir_handler)){
    			if(strpos($file, $chkstr)>0){
    				require $dir.'/'.$file;
    			}
    		}
    		closedir($dir_handler);
    	}
    }
    ...
    ?>
    Es durchsucht ein Verzeichnis nach bestimmten Dateien (Plugins) und bindet sie ein.
    Ein Plugin sieht zB. so aus:
    Code:
    <?php
    //this is a plugin
    function chat_test($parameters){
    // do something
    }
    ?>
    Wenn nun im Code das Plugin benötigt wird, wird einfach die Funktion aufgerufen.
    Jetz habe ich das Problem, dass ich eine Plugin-Reload funktion einbauen will, sie soll die Plugins neu einlesen, das geht aber nicht, weil die Funktionen die dann eingebunden werden schon vorhanden sind -> "Error: cannot redeclare function..."
    Von den functions kann ich leider auch nicht weg, weil es anderst nicht funktionieren würde -.-
    Vielleicht gibt es einen Trick wie ich functions doch überschreiben kann, oder auch löschen?

    Danke schonmal, Gruß Flo!
    Die schönsten Formulierungen sind üblicherweise auch die einfachsten. ADAM SMITH


  • #2
    Verändern sich die Funktionen denn zu Lauzeit des scripts?

    Wenn nein, fange bereits bestehende Funktionen mit function_exists() ab, oder speichere noch besser ab, welche Dateien schon geladen wurden und lasse sie aus.

    Kommentar


    • #3
      Verändern sich die Funktionen denn zu Lauzeit des scripts?

      Wenn nein, fange bereits bestehende Funktionen mit function_exists() ab, oder speichere noch besser ab, welche Dateien schon geladen wurden und lasse sie aus.
      Naja, die Funktionen werden ja mit include geladen, wenn ich vermeiden wollte, dass sie doppelt geladen werden könnte ich ja auch require_once() benutzen...
      Allerdings will ich ja, dass diese Funktionen nocheinmal eingelesen werden und die alten quasi überschreiben.

      Danke trotzdem,
      Gruß Flo!
      Die schönsten Formulierungen sind üblicherweise auch die einfachsten. ADAM SMITH

      Kommentar


      • #4
        Hi.

        Du kannst das Plugn als Klasse übergeben und dann eine Factory bauen, die dir einfach eine
        Instanz der Plugin-Klasse zurückgibt. Bespiel:

        PHP-Code:
        plugin 1:

        class 
        MyPlugin
        {
            public function 
        doSomething()
            {
                return 
        42;
            }


        plugin 2:

        class 
        AnotherPlugin
        {
            public function 
        doSomething()
            {
                return 
        'was anderes';
            }
        }

        factory

        class PluginFactory
        {
            private 
        aPluginTable = array(
                
        'chat_test' => 'MyPlugin';
            );

            public function 
        getInstance($sName)
            {
                return new 
        $this->aPluginTable[$sName]();
            }

            public function 
        setPlugin($sName$sPlugin)
            {
                
        $this->aPluginTable[$sName] = $sPlugin;
            }
        }

        gebrauch:

        $PluginFactory = new PluginFactory();

        $ChatTest $PluginFactory->get('chat_test');
        print 
        $ChatTest->doSomething(); // 42

        // umstellen:

        $PluginFactory->setPlugin('chatTest''AnotherPlugin');
        // gleiche Benutzung:
        print $ChatTest->doSomething(); // 'was anderes' 
        Ist sicher nicht ganz, was du willst, aber vielleicht ein Ansatz.

        Basti

        Kommentar


        • #5
          Zitat von FloMX
          Allerdings will ich ja, dass diese Funktionen nocheinmal eingelesen werden und die alten quasi überschreiben.
          warum denn, wenn sie sich net ändern?

          Kommentar


          • #6
            Zitat von FloMX
            Allerdings will ich ja, dass diese Funktionen nocheinmal eingelesen werden und die alten quasi überschreiben.
            Zitat von de.php.net/functions
            PHP does not support function overloading, nor is it possible to undefine or redefine previously-declared functions.

            Kommentar


            • #7
              Ah, thx, das wollte ich wissen...
              Muss das denke ich wohl über Klassen machen und die Methoden überschreiben :S
              Die schönsten Formulierungen sind üblicherweise auch die einfachsten. ADAM SMITH

              Kommentar

              Lädt...
              X