【问题标题】:PHP NORMALLY wont call this method but with xdebug is CALLEDPHP 通常不会调用此方法,但会调用 xdebug
【发布时间】:2017-05-22 08:50:40
【问题描述】:

我在 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)

【问题讨论】:

  • 确保第一个代码块public function __construct($nombres, $apellidos...中的代码是正确的。粘贴的代码有错别字,请注意额外的 ' 使一半代码变成红色,因为它认为它是一个字符串。
  • 我在写问题时似乎输入错误。我纠正了它。来源是正确的。
  • 然后使用 Xdebug 单步执行代码,查看两次执行的分歧点(变量值、方法调用等)
  • 当我这样做时,程序的工作方式完全符合我的预期。但是当我不这样做时,它不会。有趣的事

标签: php netbeans xampp xdebug ubuntu-16.04


【解决方案1】:
  1. NombreOApellidoValido 这样的方法必须返回truefalse,现在它们什么都不返回,意味着NULL
  2. 查看 PHP 中的operators precedence。尝试在等号右边的括号中总结表达式,如下所示: $this->valido = ($this->NombreOApellidoValido($nombres, 'nombresValido')); $this->valido = ($this->valido && $this->NombreOApellidoValido($apellidos, 'apellidosValido'));

【讨论】:

  • 这些方法确实在实际代码中返回了这些值。另外,我刚刚尝试了您所说的关于括号的内容,但它并没有解决问题,但谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
相关资源
最近更新 更多