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

PHP-OOP-为什么我的函数被调用了两次?,php,oop,Php,Oop,我面临一个问题,每次提交表单时,我的函数都会被调用两次 调用函数的我的表单文件: <?php require "classes/loginClass.php"; $login = new login; $login->login(); ?> <form action="" method="POST"> <label for="username">username: </label> <input type="text"

我面临一个问题,每次提交表单时,我的函数都会被调用两次

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

<?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>

所以每次我按下提交按钮时,提交都会得到两次回音。这意味着我的函数被调用了两次。我不太明白为什么。

与类同名的方法被视为旧式构造函数,每次创建对象时都会调用它

因此,在创建对象时调用一次,在显式调用时调用另一次

注意,今天,人们认为实现_构造比实现类名更好,主要是为了帮助继承

更多阅读材料:


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

使用构造函数调用函数一次,然后手动调用第二次。在PHP5.3.3中,如果将函数命名为类,则它是一个构造函数。

在PHP4中,类的构造函数与类同名。当在PHP5中添加Destrutor时,添加了命名方案_构造,但是出于兼容性的原因,旧方法仍然有效


在您的情况下,这意味着登录名将首先作为构造函数调用,然后在创建类时从显式调用中指定构造函数

如果不指定构造函数,它将由神奇的方法调用

在您的例子中,创建一个没有构造函数的类,方法是使用与该类同名的函数。类登录->方法登录。PHP的行为就像登录方法是您的构造函数一样

因此,当您调用$login=newlogin时,您正在调用作为login方法的构造函数

当您调用Login方法$Login->Login时,您将调用它两次


您明白了吗?

因为当您有一个与类同名的函数时,它被视为构造函数。在PHP5引入_构造之前,它在PHP4中就是这样工作的。它是为了向后兼容而存在的。如果我是你的话,我会用那种方法写那篇文章。可以通过构造函数传递$\u POST数组,然后将其提取并映射到类属性。除此之外,什么都可以做。这让我很恼火:
class login {

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