使用变量实例化 PHP 类不起作用

Ale*_*erz 1 php class instantiation

这是工作:

$x = new classname();
Run Code Online (Sandbox Code Playgroud)

这是行不通的:

$class = "classname";
$x = new $class();
Run Code Online (Sandbox Code Playgroud)

我得到的错误是“找不到类类名”。PHP 版本是 5.4.22。有任何想法吗?据我对这个主题的研究,这正是使用变量实例化类所需要做的。

我的实际测试代码(复制+粘贴),$build = 1:

//include the update file
$class="db_update_" . str_pad($build, 4, '0', STR_PAD_LEFT);
require_once(__ROOT__ . "/dbupdates/" . $class . ".php");

$x = new db_update_0001();
$xyz="db_update_0001";
$x = new $xyz();
Run Code Online (Sandbox Code Playgroud)

类定义:

namespace dbupdates;

require_once("db_update.php");

class db_update_0001 extends db_update
{
...
}
Run Code Online (Sandbox Code Playgroud)

我刚刚发现我的编辑添加了

use dbupdates\db_update_0001;
Run Code Online (Sandbox Code Playgroud)

到文件。这就解释了为什么“new db_update_0001();” 工作中。我想要实现的是动态包含存储在 dbupdates/db_update_0001.php 等文件中的数据库更新

问候,亚历克斯

TiM*_*TER 5

您必须使用完整的限定类名。这是namespace\classname. 所以在你的情况下,代码应该是:

$x = new db_update_0001();
$xyz="dbupdates\db_update_0001";
$x = new $xyz();
Run Code Online (Sandbox Code Playgroud)

use如果您想通过使用变量作为类名来实例化一个类,那么该语句是没有用的。