0

我想在类名中使用变量。

例如,让我们设置一个名为$var“index2”的变量。现在我想index2在这样的类名中打印:

controller_index2,但不是手动执行,我可以像这样打印 var 名称:

controller_$var;

但我认为这是一个语法错误。

我怎样才能做到这一点?

    function __construct()
    {
        $this->_section = self::path();

        new Controller_{$this->_section};

    }
4

5 回答 5

2

这是一个可怕的黑客,但是:

php > class foo { function x_1() { echo 'success'; } };
php > $x = new foo;
php > $one = 1;
php > $x->{"x_$one"}();
          ^^^^^^^^^^^^
success

与其尝试将方法名称即时构建为字符串,不如使用方法数组更合适。然后你只需使用你的变量作为数组的键。

于 2013-07-17T15:00:37.727 回答
1

将其作为双引号中的字符串回显。

echo "controller_{$var}";

试试这个(基于你在 OP 中的代码):

function __construct()
{
    $this->_section = self::path();

    $controller_name = "Controller_{$this->_section}";

    $controller = new $controller_name;

}
于 2013-07-17T14:58:05.337 回答
1

你可以这样做....遵循这个语法

function __construct()
{
    $this->_section = self::path();
    $classname = "Controller_".$this->_section;
    $instance = new $classname();

}

从字符串定义创建对象的另一种方法是使用ReflectionClass

$classname = "Controller_".$this->_section;
$reflector = new ReflectionClass($classname);

如果你的类名没有构造函数参数

$obj = $reflector->newInstance();

如果您需要将参数传递给构造函数,您可以使用

$obj = $reflector->newInstance($arg1, $arg2);

或者如果您将参数放在数组中

$obj = $reflector->newInstanceArgs($argArray);
于 2013-07-17T15:01:50.593 回答
0

尝试这个:

  $name = "controller_$var";
  echo $this->$name;
于 2013-07-17T15:00:27.537 回答
0

只是为了添加前面的答案,如果您尝试使用变量名声明新类但所有构造参数都相同并且您正在处理实例化对象都一样,那么您可能不需要不同的类而只需要不同的实例相同。

于 2013-07-17T15:10:05.213 回答