动态加载命名空间和类

时间:2015-12-02 20:29:53

标签: php class namespaces

我正在尝试加载一个名称空间和一个名字的类,我只知道变量的值。

我正在尝试这个:

<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错误:语法错误,意外的'$ arg1'(T_VARIABLE),在第5行的/home/vagrant/execute.php中需要标识符(T_STRING)

有什么方法可以加载它,或者我尝试用工厂模式制作它?

2 个答案:

答案 0 :(得分:0)

您正在运行的PHP版本&amp;你试过这个:

require_once $arg1 . ".class.php";

答案 1 :(得分: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  leandro@montana
Hello! i'm foo class 
~
∙ php oskar.php quux                                      9:59  leandro@montana
Hello! i'm quux class 
Bye! i'm another method

事实上,你可以直接new $argv[1]但你不能new $argv[1]->another_method(); xD