PHP - OOP - 为什么我的函数被调用两次?

时间:2014-04-14 19:15:53

标签: php oop

我遇到的问题是每次提交表单时都会调用我的函数两次

我的表单文件调用了函数:

<?php
require "classes/loginClass.php";
$login = new login;
$login->login();
?>

<form action="" method="POST">
    <label for="username">username: </label>
    <input type="text" id="username" name="username" required><br/>
    <label for="password2">password: </label>
    <input type="password" id="password2" name="password2" required><br/>
    <input type="submit" name="submit" value="login">
</form>

我的班级和职能:

class login {

    public function login() {
        if(isset($_POST['submit'])){
            echo "submit";
        }
    }
}

因此,每当我按下提交按钮时,&#34;提交&#34;得到回应两次。这意味着我的函数被调用两次。我不明白为什么。

5 个答案:

答案 0 :(得分:15)

与该类相同的方法被视为(旧式)构造函数,并在每次创建对象时调用。

因此,当对象被创建时,它会被调用一次,而当你明确地调用它时,它会被调用一次。

请注意,今天,它被认为是实施__construct()而不是ClassName()的更好做法,主要是为了帮助继承。


更多阅读材料:

答案 1 :(得分:6)

您的班级名称是登录名。您没有__construct(),并且您有一个名为login()的函数。因此,当您实例化类时,由于您未定义login(),因此首先调用__construct(),因此与类相同的方法名称将成为构造函数。然后,您再次调用login()函数。因此它被叫了两次。

答案 2 :(得分:5)

创建类时,应指定构造函数。

如果您没有指定构造函数,则由Magic Methods调用。

在你的情况下,你创建一个没有构造函数的类,使用一个具有相同名称的函数。课程登录 - &gt;方法登录。像登录方法这样的PHP行为是你的构造函数......

所以当你调用$ login = new Login()时,你正在调用构造函数,即登录方法。

当您拨打Login Method,$ login-&gt; login()时,您正在调用它两次。

你明白了吗?

答案 3 :(得分:4)

您可以使用构造函数调用一次该函数,手动调用seconde时间。在PHP 5.3.3中,如果您将类命名为类,则它是构造函数。

答案 4 :(得分:3)

在PHP 4中,类的构造函数与类具有相同的名称。当在PHP中添加了5个析构函数时,添加了命名方案__construct(),但由于兼容性原因,旧方法仍然有效。

在你的情况下,这意味着login()将首先被称为构造函数,然后从显式调用