class SignUp
{
var $pass;
var $repass;
var $eMail;
var $userName;
function __construct($p,$rep,$uName,$mail)
{
$this->pass = $p;
$this->repass = $rep;
$this->userName = $uName;
$this->eMail = $mail;
}
public function checkData()
{
if ($this->pass != $this->repass)
{
return 2;
}
}
}
这段代码似乎不起作用,我不知道为什么..即使它们相同,它也总是返回 2。
这是我如何调用对象
$ch = new SignUp($_POST['password'], $_POST['repassword'], $_POST['uname'], $_POST['emailID']);
echo $ch->checkData();
任何帮助将不胜感激。
变量名混沌
问题很可能是由我所说的非常突出的代码气味引起的。每个变量有三个不同的名称,而不仅仅是一个。有这么多不同的变量名称,很容易有一个错误,然后结果将是我们看到的,因为其中一个变量将始终为 NULL。
例如,密码是-密码-通过- p
等。
在每个地方使用密码!其他人也一样。
每个结果都应该返回一些东西
在相等的情况下,也返回一些东西(我会返回 TRUE/FALSE(,如下所示:
if ($this->password == $this->passwordRepeat)
{
return TRUE;
}
return FALSE;
方法名称错误
重命名方法。它比较密码,因此请将其称为 passwordsIdentical
或 comparePasswords
.
您可以轻松地将其隔离到不起作用的 $_POST 变量中。从某种意义上说,该类没有任何问题,因为比较不起作用:
<?php
class SignUp{
var $pass;
var $repass;
var $eMail;
var $userName;
function __construct($p,$rep,$uName,$mail){
$this->pass=$p;
$this->repass=$rep;
$this->userName=$uName;
$this->eMail=$mail;
}
public function checkData(){
if($this->pass!=$this->repass)
return 2;
}
}
$a = new SignUp( "php", "notphp", "", "" );
$b = new SignUp( "php", "php", "", "" );
var_dump( $a -> checkData() );
//int(2)
var_dump( $b -> checkData() );
//NULL
var_dump( $a -> checkData() === $b -> checkData() );
//bool(false), they return different results.
?>
提交表单 HTML 是什么样的?
<?php
/* 检查此代码 */
class SignUp{
public $pass;
public $repass;
public $eMail;
public $userName;
function __construct($p,$rep,$uName,$mail){
$this->pass=$p;
$this->repass=$rep;
$this->userName=$uName;
$this->eMail=$mail;
}
public function checkData(){
if($this->pass!=$this->repass)
return 2;
}
}
?>
替换这个
if($this->pass!=$this->repass(
自
if(trim($this->pass) != trim($this->repass))
将起作用