我遇到的问题是每次提交表单时都会调用我的函数两次
我的表单文件调用了函数:
<?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;得到回应两次。这意味着我的函数被调用两次。我不明白为什么。
答案 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()
将首先被称为构造函数,然后从显式调用