PHP NORMALLY不会调用此方法,但xdebug是CALLED

时间:2017-01-07 18:53:41

标签: php netbeans xampp xdebug ubuntu-16.04

我在Ubuntu上使用XAMPP 7.0.13-1(PHP 7.0.9)。我已经安装了Xdebug 2.5.0,目前在NetBeans 8.5中使用它。

我遇到这种情况:当我运行以下代码调试时,dump的最终值为NombreOApellidoValidoNombreOApellidoValidoContraseñaValidaEmailValido(预期)。但是当我在相同的输入数据下运行它而不进行调试时,我得到NombreOApellidoValidoNombreOApellidoValidoContraseñaValida(意外):

public function __construct($nombres, $apellidos, $contraseña, $repContraseña, $email, IUsuarioDB $capaDatos){
$this->dump = "";
$this->capaDatos = $capaDatos;

$this->valido = $this->NombreOApellidoValido($nombres, 'nombresValido');
$this->valido = $this->valido && $this->NombreOApellidoValido($apellidos, 'apellidosValido');
$this->valido = $this->valido && $this->ContraseñaValida($contraseña, $repContraseña);
$this->valido = $this->valido && $this->EmailValido($email);

$this->nombres = $nombres;
$this->apellidos = $apellidos;
$this->contraseña = $contraseña;
$this->email = $email;

echo $this->dump; 
if($this->valido){
    $this->codigoActivacion = md5(time());
    $this->capaDatos->GuardarUsuario($this);
}

}

public function NombreOApellidoValido($nombres, $aValidar){
    $this->dump .= "NombreOApellidoValido";
    //Do stuff
}

public function ContraseñaValida($contraseña, $repContraseña){
    $this->dump .= "ContraseñaValida";
    //Do stuff
}

public function EmailValido($email){
    $this->dump .= "EmailValido";
    if(filter_var($email, FILTER_VALIDATE_EMAIL)){
        $this->emailValido = true;
        if($this->capaDatos->EmailUnico($email)){
            $this->emailUnico = true;
            return true;
        }else{
            $this->emailUnico = false;
            return false;
        }
    }else{
        $this->emailValido = false;
        return false;
    }
}

我不明白为什么会这样。在两种情况下输入都是相同的,唯一的区别是在一个我调试和在我没有。根据输出判断,PHP在正常运行时没有执行EmailValido($email)

1 个答案:

答案 0 :(得分:0)

  1. NombreOApellidoValido之类的方法必须返回truefalse,现在它们不返回任何内容,意味着NULL
  2. 查看PHP中的operators precedence。尝试在括号中的等号右边结束表达式,如下所示: $this->valido = ($this->NombreOApellidoValido($nombres, 'nombresValido')); $this->valido = ($this->valido && $this->NombreOApellidoValido($apellidos, 'apellidosValido'));