我试图基于我的数据库PDO类创建一个简单的类,我可以说“获取此ID”,它将打印信息。我正在尝试在“ qu”中执行此操作,但收到以下错误:“调用未定义的方法qu :: get()”。
问题可能混合存在,因此这里的任何帮助都会很棒。非常感谢!!
class db {
protected static $conn;
private function __construct(){}
public static function connect() {
if (!isset(self::$conn)) {
self::$conn = new PDO('mysql:host=localhost;dbname=database', DB_USER, DB_PASSWORD);
}
return self::$conn;
}
}
class qu {
private $db;
function quconn (&$db){
$this->db = &$db;
}
private static function getq($id){
$sql="SELECT * FROM table WHERE id=:id";
$stmt = self::quconn()->prepare($sql);
$stmt->execute(array(':id'=> $id));
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $result;
}
}
//$data = db::connect()->query("SELECT * FROM table")->fetchAll(); // this works
$data = qu::getq("22"); //can i use something like this? this causes the error
print_r($data);
最佳答案
qu类的功能getq应标记为public access修饰符。
否则,由于getq是私有函数,因此下一行将失败
$data = qu::getq("22");
其次,此代码中的问题
function quconn (&$db){
$this->db = &$db;
}
当您从静态内容$ qu输入函数quconn时,此功能不可用。
使用self :: $ db代替。
对于qu类,遵循db类的相同结构,这是单例管理类。
我还建议您自己澄清$ this与自我,静态竞赛等之间的区别。
PHP官方文档提供了很多有关
我也不认为你需要引用传递方法:
尝试如下重写quconn函数:
function quconn ($db){
self::$db = $db;
}
顺便说一句,我不认为Qu类是经过精心设计的
即使您更正了按引用传递问题,该指令也将不起作用:
$stmt = self::quconn()->prepare($sql);
您正在根据对quconn的调用结果调用prepare函数,该函数不会返回任何内容...
我建议:
$stmt = db::connect()->prepare($sql);
这将获取PDP实例并调用prapare方法。
关于php - PDO类作用域对未定义方法的调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9734029/