2015-12-02 2 views
1

Я пытаюсь загрузить пространство имен и класс с именем, которое я знаю только по значению переменной.Динамически загружать пространства имен и класс

Я пытаюсь с этим:

<php 
/** 
* Namespaces and class have the same name. 
*/ 

require_once($arg1 . '.class.php'); 

use \$arg1\$arg1; 

/** 
* also I have try 
* use \{$arg1}\{$arg1}; 
*/ 
$object = new $arg1(); 
var_dump($object); 
?> 

Это дает мне обратно:

PHP Parse error: syntax error, unexpected '$arg1' (T_VARIABLE), expecting identifier (T_STRING) in /home/vagrant/execute.php on line 5

Есть ли способ, чтобы загрузить это, или я пытаюсь сделать это с рисунком фабрики?

ответ

0

AFAIK (не уверен PHP7) цепочки переменных или констант в пространствах имен вызова не представляется возможным.

в случае, если вы только хотели бы загрузить класс в зависимости от изменяющегося значения в переменной (прибывающий в $ ARGV или $ _GET или что-то) я обычно делаю что-то вроде: (это консольный скрипт)

<?php 
class foo { 
    function foo() { 
     print "Hello! i'm foo class \n"; 
    } 
} 

class quux { 
    function quux() { 
     print "Hello! i'm quux class \n"; 
    } 
    function another_method() { 
     print "Bye! i'm another method \n"; 
    } 
} 


$var = $argv[1]; 
$obj = new $var; 
if ("quux" == $var){ 
    $obj->another_method(); 
} 

это выход я получаю :)

∙ php oskar.php foo          9:58 [email protected] 
Hello! i'm foo class 
~ 
∙ php oskar.php quux          9:59 [email protected] 
Hello! i'm quux class 
Bye! i'm another method 

на самом деле, вы можете сделать new $argv[1] напрямую, но вы не можете сделать new $argv[1]->another_method(); XD

0

который PHP версии вы работаете & вы пробовали это:

require_once $arg1 . ".class.php"; 
+0

Мой PHP версия PHP 5.6.14-0 + deb8u1, и у меня также есть chante для require_once $ arg1. ".class.php"; Но имеют ту же ошибку. –

Смежные вопросы