【问题标题】:PHP namespaces and classes [closed]PHP命名空间和类[关闭]
【发布时间】:2012-10-14 15:25:28
【问题描述】:

我有两个类,都在不同的命名空间中。当我尝试从一个命名空间创建对象时,我得到了错误

Fatal error:  Class 'Classes\DrDatabase' not found in C:\Path\to\workspace\AplicationName\app\models\Users.model.php on line XY

php 命名空间有什么我不明白的地方吗?

两个文件:

FILE 1
namespace Classes;

class DrDatabase extends MssqlDatabase {

public function __construct() {
    parent::createLog(__CLASS__);
    parent::connect('ipaddress', 'database', 'user', 'password');
    if ($this->link) {
        $this->log->info('Connected');
    }
}
}

FILE 2
namespace Model;

use \Classes\DrDatabase;

class UsersModel implements MasterModel {
    private function get($id, $onlyEnabled) {
        $db = new DrDatabase();
        $getOnlyEnabled = 1;
        if (!$onlyEnabled)
            $getOnlyEnabled = 0;
        $SQL = "SELECT * FROM table";
        $resultSet = $db->query($SQL);
        $result = array();
        while ($row = mssql_fetch_assoc($resultSet)) {
            $result[] = self::createUserObject($row['col1'],$row['col2']);
        }
    }
}

【问题讨论】:

  • 试试前面加一个“\”,像这样:$db = new \DrDatabase();
  • 您只能实例化已定义的类。在您的情况下,\Classes\DrDatabase 的定义尚未加载。加载它,你很好。这正是错误消息告诉你的内容,它没有撒谎。
  • \Classes 是一个糟糕的命名空间名称。它不会告诉你它所包含的任何内容。
  • 是的,我知道,这只是一个工作名称,但只有一个名称空间必须重命名。我对“模型”也不满意,所以我会将它们重命名为更有意义的东西

标签: php namespaces


【解决方案1】:

除非您使用正确配置的自动加载器,否则您仍然必须包含“文件 1”才能使其正常工作。

否则 - 您的 UserModel 怎么知道在哪里可以找到 DrDatabase 类?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2012-08-10
    • 2014-08-12
    • 2014-09-18
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多