2017-01-07 3 views
0

Я нахожусь на XAMPP 7.0.13-1 (PHP 7.0.9) на Ubuntu. Я установил Xdebug 2.5.0 и в настоящее время использую его с NetBeans 8.5.PHP НОРМАЛЬНО не вызовет этот метод, но с xdebug CALLED

меня такая ситуация: Когда я запускаю следующую отладку кода, окончательное значение 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

Убедитесь, что код в первом блоке кода 'публичной функции __construct ($ nombres, $ apellidos ...' правильно вставленный код. имеет опечатку, обратите внимание на добавление «, что делает половину кода красным, поскольку он считает, что это строка. – JimL

+0

Кажется, у меня есть тип, который по ошибке при написании вопроса. Я исправил его. Источник правильный. –

+0

Затем используйте Xdebug для шага через код и посмотреть, где два исполнения расходятся (значения переменных, вызовы методов и т. д.) – JimL

ответ

0
  1. Ваши методы, такие как NombreOApellidoValido должны вернуть true или false, теперь они не возвращаются ничего, значит NULL.
  2. Посмотрите на operators precedence на PHP. Попробуйте сделать вывод выражения в правой части знака равенства в скобках, как это: $this->valido = ($this->NombreOApellidoValido($nombres, 'nombresValido')); $this->valido = ($this->valido && $this->NombreOApellidoValido($apellidos, 'apellidosValido'));
+0

Методы возвратите что-то эти значения в фактическом co де. Кроме того, я просто попробовал, что вы говорите о скобке, однако это не решает проблему, но спасибо. –