PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   classen dynamisch laden (https://www.php-resource.de/forum/php-developer-forum/105708-classen-dynamisch-laden.html)

sanktusm 10-09-2016 11:36

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?

h3ll 10-09-2016 18:14

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

sanktusm 19-09-2016 12:33

kannst du mir einen Autoloader empfehlen
 
?

h3ll 19-09-2016 12:41

Zitat:

Zitat von sanktusm (Beitrag 673099)
?

Wozu programmierst du das?

DivDax 28-09-2016 15:28

Ich würde dir raten composer zu verwenden. Damit hast du einen funktionierenden autoloader und Paketverwaltung. ;)

mermshaus 28-09-2016 21:59

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.


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:03 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG