PHP可以将类的名称中的对象实例化为字符串吗?

use*_*295 70 php initialization class object

如果类名存储在字符串中,PHP是否可以从类的名称实例化对象?

bri*_*vis 118

是的,当然.

$className = 'MyClass';
$object = new $className; 
Run Code Online (Sandbox Code Playgroud)

  • 很酷,我应该在问他之前测试一下.谢谢! (5认同)
  • 如果clsss在命名空间中,请使用此$ class ='PrintData \\'.$类; 返回new $ class(); (4认同)
  • @user - 太对了。我想知道为什么我直接来到 SO 而不是做最低限度的工作?哈哈 (2认同)
  • 事实上它并不那么明显.我知道在Java中它是一种叫做反射的东西,但与此相比,这非常简单. (2认同)
  • 另外,如PHP文档所述,如果要实例化的类在名称空间内,则必须指定FQN(完全限定名称)。例如,我本人在“ App \ Http \ Controllers”命名空间中,并且我有一个字符串$ string ='App \ Models \ Task'; 我以为,如果我尝试实例化字符串,它将损坏,但实际上,您不需要在开头添加\。 (2认同)

And*_*son 6

静态也:

$class = 'foo';
return $class::getId();
Run Code Online (Sandbox Code Playgroud)

  • @Blackbam相关相关补充答案。仅当有用时才发表评论。 (2认同)

jos*_*sef 6

如果您的班级需要参数,您应该这样做:

class Foo 
{
   public function __construct($bar)
   {
      echo $bar; 
   }
}

$name = 'Foo';
$args = 'bar';
$ref = new ReflectionClass($name);
$obj = $ref->newInstanceArgs(array($args));
Run Code Online (Sandbox Code Playgroud)

  • 我来这里寻找什么。谢谢 (2认同)

Mr.*_*ith 5

是的它是:

<?php

$type = 'cc';
$obj = new $type; // outputs "hi!"

class cc {
    function __construct() {
        echo 'hi!';
    }
}

?>
Run Code Online (Sandbox Code Playgroud)