Php 函数login()自动运行

Php 函数login()自动运行,php,compiler-errors,Php,Compiler Errors,我得到了这个项目,我在php建设,我遇到了一个奇怪的错误。这不是我正在寻找的解决方案,而是错误的原因,因为我已经找到了一个解决方案(我不喜欢) 我构建了一个面向对象的php项目。当我在类login{}中有函数login()时,它会在加载页面的编译过程中自动运行,但当我将函数重命名为login2()时,它不会运行。启动时我不会在任何地方调用该函数,它应该在用户单击登录按钮时调用 //code example class Login extends Page{ public function

我得到了这个项目,我在php建设,我遇到了一个奇怪的错误。这不是我正在寻找的解决方案,而是错误的原因,因为我已经找到了一个解决方案(我不喜欢)

我构建了一个面向对象的php项目。当我在类login{}中有函数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()以外的任何名称,则不会导致任何问题,甚至在以后调用它时也能正常工作


所以我的问题是,有人知道为什么会发生这种情况。

因为它来自类的构造函数

public function login(){   }
因此,当您实例化类
login
时,它将查找构造函数,因为您有公共函数login(),它将成为您的类构造函数,因此被调用

请在此阅读更多关于此的信息


我认为在php中只有_构造函数可以被视为一个构造函数,毕竟它不是Java。啊,我现在明白了,我以前尝试过这个,但它不起作用,但我想我的本地主机运行5.3.3,而服务器运行5.3.2。您需要显式指定
_构造()
否则,具有类名的方法名将成为构造函数。构造函数是在父类中指定的,但我想这不算,我只需重命名函数即可。我想知道发生错误的原因,您给出了答案,但仍然需要等待8分钟才能接受。是的,因为如果子类定义了构造函数,则不会隐式调用父构造函数,并且对于您的子类,
login()
将成为构造函数。