我有一个被调用的类,由于某种原因,我找到了一个函数,但另一个函数却没有。这是我的代码:
<?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文件找到如何使错误日志工作。
答案 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之类的其他内容,然后重试。