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

时间:2014-09-25 12:53:17

标签: php class instantiation

这是有效的:

$x = new classname();

这不起作用:

$class = "classname";
$x = new $class();

我得到的错误是“未找到类类名”。 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();

班级定义:

namespace dbupdates;

require_once("db_update.php");

class db_update_0001 extends db_update
{
...
}

我刚发现我的编辑添加了

use dbupdates\db_update_0001;

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

此致 亚历

2 个答案:

答案 0 :(得分:4)

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

$x = new db_update_0001();
$xyz="dbupdates\db_update_0001";
$x = new $xyz();

如果您希望使用变量作为类名来实例化类,那么use语句将毫无用处。

答案 1 :(得分:-1)

试试这个

<?php
$className = yourClassName();
$x = new $className;
?>