Php 使用变量';将字符串转换为类名或其他名称

Php 使用变量';将字符串转换为类名或其他名称,php,class-names,Php,Class Names,我想在类名中使用变量 例如,让我们将名为$var的变量设置为“index2”。 现在我想在类名中打印index2,如下所示: controller_$var; controller\u index2,但我不需要手动操作,只需在此处打印var名称,如下所示: controller_$var; 但我认为这是一个语法错误 我该怎么做 function __construct() { $this->_section = self::path();

我想在类名中使用变量

例如,让我们将名为
$var
的变量设置为“index2”。 现在我想在类名中打印
index2
,如下所示:

controller_$var;
controller\u index2
,但我不需要手动操作,只需在此处打印var名称,如下所示:

controller_$var;
但我认为这是一个语法错误

我该怎么做

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

        new Controller_{$this->_section};

    }

以双引号将其作为字符串回显

echo "controller_{$var}";
尝试以下操作(基于OP中的代码):


以双引号将其作为字符串回显

echo "controller_{$var}";
尝试以下操作(基于OP中的代码):

试试这个:

  $name = "controller_$var";
  echo $this->$name;
试试这个:

  $name = "controller_$var";
  echo $this->$name;

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

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

与其尝试动态地将方法名构建为字符串,方法数组可能更合适。然后您只需使用变量作为数组的键。

这是一种可怕的攻击,但是:

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

与其尝试动态地将方法名构建为字符串,方法数组可能更合适。然后您只需使用变量作为数组的键。

您可以这样做。。。。遵循以下语法

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

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

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

$obj = $reflector->newInstance();
当然,如果需要将参数传递给构造函数,可以使用

$obj = $reflector->newInstance($arg1, $arg2);
或者如果数组中有参数

$obj = $reflector->newInstanceArgs($argArray);

你可以这样做。。。。遵循以下语法

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

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

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

$obj = $reflector->newInstance();
当然,如果需要将参数传递给构造函数,可以使用

$obj = $reflector->newInstance($arg1, $arg2);
或者如果数组中有参数

$obj = $reflector->newInstanceArgs($argArray);

为了补充前面的答案,如果您试图用变量名声明新类,但所有构造参数都相同,并且对实例化对象的处理都相同,那么您可能不需要不同的类,只需要相同的不同实例。

为了补充前面的答案,如果您试图用变量名声明新类,但所有构造参数都相同,并且对实例化对象的处理都相同,那么您可能不需要不同的类,只需要相同的不同实例。

您不能用变量名声明类。您不能用变量名声明类。否问题@junatanmdasured:-DI现在得到一个错误解析错误:语法错误,第28行C:\xampp\htdocs\framework\includes\class\Core.class.php中意外的“{”没有问题@junatanmdasured:-DI现在得到一个错误解析错误:语法错误,第28行C:\xampp\htdocs\framework\includes\class\Core.class.php中意外的“{”