2011-12-15 17 views
7

Estoy buscando una manera de cargar clases en PHP sin usar nombres cableados.Cargando clases PHP desde la cadena

La idea es que el script cargue un archivo de texto con los nombres de 'componentes' (clases), y luego los cargue por los nombres en el archivo. Por ejemplo:

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

Cuando se ejecuta el PHP, que tendría que hacer algo como esto:

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

Respuesta

3

Su ejemplo es casi correcto como es. Simplemente puede reemplazar {myClass} con $ myClass y debería funcionar.

Aquí está un ejemplo sencillo de cómo esto podría ser utilizado:

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; 
?> 

Esta es la Salida "myText" a la pantalla, el contenido de su propiedad de clase incluido dinámicamente.

+0

Además, si usted está necesitando para sacar el nombre de la clase a partir de XML, que podría hacerlo tan simple como llamar a un simple [preg_match()] (http : //us2.php.net/manual/en/function.preg-match.php). Comente si le gustaría una explicación sobre ese tema. –

+0

PHP es genial de esa manera; es tan flexible sobre nombres y tipeo. –

0

Utilice el ReflectionClass para esto.

require_once $class . ".class.php"; 

$refl = new \ReflectionClass($class); 

$params_for_construct = array($param1, param2); 

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

por qué no usar cargador automático

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