2011-12-15 15 views
7

Sto cercando un modo per caricare classi in PHP senza utilizzare i nomi cablati.Caricamento classi PHP da stringa

L'idea è che lo script caricherà un file di testo con i nomi di "componenti" (classi), quindi li caricherà con i nomi nel file. Per esempio:

<xml><Classes><class name="myClass"/></Classes></xml> 

Quando il PHP viene eseguito, si avrebbe bisogno di fare qualcosa di simile:

require_once {myClass}".class.php"; 
var myclass = new {myClass}(); 

risposta

3

Il tuo esempio è quasi corretto così com'è. Puoi semplicemente sostituire {myClass} con $ myClass e dovrebbe funzionare.

Ecco un semplice esempio di come questo potrebbe essere utilizzato:

File: myClass.class.php 

<?php 
    class myClass { 
     public $myVar = 'myText'; 
    } 
?> 

File: test.php 

<?php 
    $className = "myClass"; 
    require_once $className . ".class.php"; 
    $myInstance = new $className; 
    echo $myInstance->myVar; 
?> 

Questo dovrebbe uscita "myText" per lo schermo, il contenuto della proprietà di classe incluso dinamicamente.

+0

Inoltre, se hai bisogno di tirare il nome della classe da XML, è possibile farlo nel modo più semplice chiamare un semplice [preg_match()] (http : //us2.php.net/manual/en/function.preg-match.php). Commento se desideri elaborare l'argomento. –

+0

PHP è fantastico così; è così flessibile riguardo ai nomi e alla digitazione. –

0

Utilizzare ReflectionClass per questo.

require_once $class . ".class.php"; 

$refl = new \ReflectionClass($class); 

$params_for_construct = array($param1, param2); 

$instance = $refl->newInstanceArgs($params_for_construct); 
0

perché non utilizzare caricatore automatico

spl_autoload_register(function ($class) { 
    require 'class_folder/' . $class . '.class.php'; 
});