【问题标题】:Instantiating a PHP class using a variable is not working使用变量实例化 PHP 类不起作用
【发布时间】:2014-09-25 12:53:17
【问题描述】:

这是有效的:

$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 等文件中的数据库更新

问候, 亚历克斯

【问题讨论】:

  • 那么classname 类没有定义。向我们展示定义以及包含它的位置和方式。
  • 为我工作...Codepad Example
  • 这对我有用:$c = "stdClass"; $x = 新 $c();
  • 我添加了更多信息。 HTH

标签: php class instantiation


【解决方案1】:

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

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

如果您想通过使用变量作为类名来实例化一个类,use 语句将毫无用处。

【讨论】:

    【解决方案2】:

    试试这个

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

    【讨论】:

    • 鉴于缺少任何名为 yourClassName() 的函数,除了出错之外,您希望它实现什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2012-05-22
    • 2011-01-06
    • 1970-01-01
    相关资源
    最近更新 更多