PHP无法在我的班级中找到一个函数

时间:2010-01-04 17:12:05

标签: php namespaces

我有一个被调用的类,由于某种原因,我找到了一个函数,但另一个函数却没有。这是我的代码:

<?php


namespace LMVC\Database;

class PDO
{
private static $instance = NULL;

public static function setup($dsn, $username, $password)
{
    try {
        self::$instance = new \PDO($dsn, $username, $password);
    }
    catch(PDOException $e) {
        throw new Exception("Error: " . $e->getMessage());
    }
}

public static function getInstance()
{
    if(self::$instance === NULL) {
        throw new Exception("Database is not instantiated");
    }

    return self::$instance;
}

public function query($sql)
{
    if(self::$instance === NULL) {
        throw new Exception("Database is not instantiated");
    }

    try {
        return self::$instance->query($sql);
    }
    catch(PDOException $e) {
        throw new Exception("Error: " . $e->getMessage());
    }
}

public function fetchAll($stmt)
{
    if(self::$instance === NULL) {
        throw new Exception("Database is not instantiated");
    }

    try {
        return self::$instance->fetchAll($stmt);
    }
    catch(PDOException $e) {
        throw new Exception("Error: " . $e->getMessage());
    }
}

public function prepare()
{

}

public function quote()
{

}
}

可以找到除fetchAll之外的所有函数,但fetchAll不是。我似乎无法添加存在的函数。当我将fetchAll的名称更改为其他内容时,无法找到我将其重命名为的functoin。此外,当我摆脱能够找到的函数,如引用,查询和准备,PHP仍然能够找到它们,我测试使用var_dump功能存在。我尝试重新启动apache,重新启动Windows 7.我使用的是php 5.3.1。

关于如何调试的任何其他想法?我似乎无法通过编辑我的php.ini文件找到如何使错误日志工作。

4 个答案:

答案 0 :(得分:2)

您可能正在实施PHP的预建PDO Object。您是否尝试使用命名空间路径直接实例化对象? e.g。

$foo = new LMVC\Database\PDO;

否则,PHP可能会实例化自己的名为PDO的对象,该对象位于根命名空间中。

编辑更多信息

如果要包含定义此类的文件,并且未在实例化此类的文件中指定命名空间,则PHP将仅考虑声明的命名空间在执行定义所述文件的文件期间生效类。在该包含文件之外,它将使用namespace fallback来声明全局对象。

你应该,因为PDO是一个现有的全局对象,重命名你的类(myPDO,也许?),以避免将来出现这种混淆。

答案 1 :(得分:1)

您是否尝试过重命名课程?可能是您的代码实际上是在尝试使用PHP的内置PDO对象。

答案 2 :(得分:0)

我还没有使用命名空间,但我敢打赌,你正在初始化正常的PDO对象,而不是你在命名空间中定义的那个。

在初始化课程时是否设置了正确的命名空间?

请记住,命名空间语句仅对当前文件有效。

答案 3 :(得分:0)

将PDO类重命名为PDOImplementation之类的其他内容,然后重试。