classen dynamisch laden

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

  • classen dynamisch laden

    Hallo,
    ich suche eine kompakte Lösung um Klassen zu laden:

    über class1 extends class2 ist das ja leicht möglich. Nun möchte ich classen die in Ordner abgelegt werden dynamisch laden sodass man die classe nur in den Ordner ablegen und automatisch integrieren kann:

    PHP-Code:
    <?php
    class class1 {
        public function 
    __construct() {
            echo 
    "myClass init'ed successfuly!!!";
        }
        
        public function 
    test ($mytext) {
        
        echo 
    $mytext;
        }
    }
    ?>

    <?php
    class class2 {
        public function 
    __construct($class) {


    $this -> new $class();

          
        
           
        
            echo 
    "class 2 init'ed successfuly!!!";
        }
    }
    ?>

    <?php
        $classes 
    = Array('class1','class2');
        class 
    ClassAutoloader {
            public function 
    __construct() {
                
    spl_autoload_register(array($this'loader'));
            }
            private function 
    loader($className) {
                echo 
    'Trying to load '$className' via '__METHOD__"()\n";
                include 
    $className '.php';
            }
        }

        
    $autoloader = new ClassAutoloader();

         foreach(
    $classes as $class)
         
    $obj = new $class();
        
         
    $obj -> text('hier steht was'); //findet die Funktion nicht

    ?>
    Mein Frage: Geht das irgendwie?

  • #2
    Was gefällt dir an den hunderten bis tausenden bestehenden Autoloadern nicht? Was soll deiner können, was andere nicht können?

    Kommentar


    • #3
      kannst du mir einen Autoloader empfehlen

      ?

      Kommentar


      • #4
        Zitat von sanktusm Beitrag anzeigen
        ?
        Wozu programmierst du das?

        Kommentar


        • #5
          Ich würde dir raten composer zu verwenden. Damit hast du einen funktionierenden autoloader und Paketverwaltung.

          Kommentar


          • #6
            Ich bin auch durchaus dafür, Composer zu nutzen. Das ergibt selbst dann Sinn, wenn keine externen Abhängigkeiten vorliegen. Composer erzeugt auch Autoloader für eigenen Quellcode.

            Ansonsten ist die Sache aber mit ungefähr so einem Code grundsätzlich auch erledigt:

            PHP-Code:
            spl_autoload_register(function ($className) {
                
            $path __DIR__ '/src/' str_replace('\\''/'$className) . '.php';

                if (
            file_exists($path)) {
                    require 
            $path;
                }
            }); 
            Ein new Foo\Bar\Whatever(); würde etwa versuchen, die Datei ./src/Foo/Bar/Whatever.php einzubinden.

            Eine Klasse pro Datei, Namespaces entsprechen Verzeichnisstruktur.

            Autoloading ist ein gelöstes Problem.

            Zum Eröffnungspost:

            Die Funktion ist eine Methode und heißt bei deiner class1 test und nicht text.

            Der Code von class2 ist syntaktisch fehlerhaft, und die foreach-Schleife tut vermutlich auch nicht das, was sie soll. Da fehlen vermutlich geschweifte Klammern, um die beiden nachfolgenden Statements zu gruppieren.
            Zuletzt geändert von mermshaus; 04.10.2016, 12:43.

            Kommentar

            Lädt...
            X