我得到了这个项目,我在php中构建,我遇到了一个奇怪的错误。这不是我正在寻找的解决方案,而是错误的原因,因为我已经找到了解决方案(我不喜欢)。
我构建了一个OOP php项目。当我在类登录{}中使用函数login()时,它会在编译加载页面时自动运行,但是当我将函数重命名为login2()时它不会。我没有在启动的任何地方调用该函数,它应该在用户单击登录按钮时调用。
//code example
class Login extends Page{
public function login(){ //This function causes problems.
$result = $this->data->runQuery(SELECT * FROM users WHERE name = ?);
//use result
}
}
class Page{
protected $data;
public function __construct($data){
$this->data = $data;
}
}
//Index.php contains this.
$data = new DatabaseConnection($ip, $username, $pass, $db); //sets up a dbcon.
$login = new Login($data); //add database object to Login object.
//Fatal error: Call to a member function runQuery() on a non-object in Login.php
这是我的代码的缩短版本我不会在任何地方调用函数login(),但它仍然在php加载页面时编译。但是,如果我将函数重命名为除login()或LOGIN()以外的任何函数,它不会导致任何问题,它甚至可以在以后调用它时起作用。
所以我的问题是否有人知道为什么会这样。
答案 0 :(得分:1)
因为它来自类的构造函数
public function login(){ }
因此,当您实例化类login
时,它将查找构造函数,因为您具有公共函数login(),它将成为您的类构造函数,因此它被调用。
请在此处详细了解