php if-condition 与类变量不起作用


Php If-Condition with Class Variables Not Working

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;

方法名称错误

重命名方法。它比较密码,因此请将其称为 passwordsIdenticalcomparePasswords .

您可以轻松地将其隔离到不起作用的 $_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))将起作用