douqian8238
2014-09-25 12:53
浏览 129
已采纳

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

This is working:

$x = new classname();

This is not working:

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

The error I get is "Class classname not found". PHP version is 5.4.22. Any ideas? As far as I have researched into this topic this is exactly what you need to do in order to instantiate a class using a variable.

My actual testcode (copy+paste), $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();

The class definition:

namespace dbupdates;

require_once("db_update.php");

class db_update_0001 extends db_update
{
...
}

I just found out that my editor added

use dbupdates\db_update_0001;

to the file. So that explains why "new db_update_0001();" is working. What i want to achieve is that I dynamically include database updates which are stored in files like dbupdates/db_update_0001.php

Regards, Alex

图片转代码服务由CSDN问答提供 功能建议

这是有效的:

  $ x = new classname(  ); 
   
 
 

这不起作用:

  $ class =“classname”; 
 $ x =  new $ class(); 
   
 
 

我得到的错误是“找不到类类名”。 PHP版本是5.4.22。 有任何想法吗? 至于我已经研究过这个主题,这正是你需要做的事情,以便使用变量实例化一个类。

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

  //包含更新文件
 $ 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 
 {
 ... 
} 
   
 
 

我刚刚发现我的编辑器已添加

 使用dbupdates \ db_update_0001; 
   
 
 

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

问候, Alex

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dongshi8359 2014-09-25 13:14
    已采纳

    You have to use the full qualified class name. Which is namespace\classname. So in your case the code should be:

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

    The use statement is useless if you like to instantiate a class by using a variable as classname.

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • doubeng9407 2014-09-25 12:57

    Try this

    <?php
    $className = yourClassName();
    $x = new $className;
    ?>
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题