2017-01-07 2 views
0

Je suis sur XAMPP 7.0.13-1 (PHP 7.0.9) sur Ubuntu. J'ai installé Xdebug 2.5.0 et l'utilise actuellement avec NetBeans 8.5.PHP NORMALEMENT ne pas appeler cette méthode mais avec xdebug est CALLED

J'ai cette situation: Quand je lance le débogage de code suivant, la valeur finale de dump est NombreOApellidoValidoNombreOApellidoValidoContraseñaValidaEmailValido (attendu). Mais quand je lance sous les mêmes données d'entrée sans débogage, je reçois NombreOApellidoValidoNombreOApellidoValidoContraseñaValida (inattendu):

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; 
    } 
} 

Je ne comprends pas pourquoi cela se passe. L'entrée est la même dans les deux scénarios, la seule différence est que dans un je débogue et dans le je ne le fais pas. A en juger par la sortie, PHP n'exécute pas EmailValido($email) lorsqu'il s'exécute normalement.

+1

Assurez-vous que le code dans le premier bloc de code 'fonction publique __construct ($ nombres, $ apellidos ...' est correct Le code collé. a une faute de frappe, notez l'extra 'qui fait rouge la moitié du code car il pense qu'il s'agit d'une chaîne – JimL

+0

Je semble avoir tapé par erreur lors de l'écriture de la question, je l'ai corrigé.La source est correcte –

+0

Ensuite, utilisez Xdebug à l'étape à travers le code et voir où les deux exécutions divergent (valeurs variables, appels de méthode, etc) – JimL

Répondre

0
  1. Vos méthodes comme NombreOApellidoValido doivent retourner true ou false, maintenant ils ne reviennent, signifie NULL. Voir le operators precedence en PHP. Essayez de conclure des expressions à droite du signe égal entre parenthèses comme ceci: $this->valido = ($this->NombreOApellidoValido($nombres, 'nombresValido')); $this->valido = ($this->valido && $this->NombreOApellidoValido($apellidos, 'apellidosValido'));
+0

Les méthodes faire retourner quelque chose ces valeurs dans la co réelle de. Aussi, j'ai juste essayé ce que vous dites sur le support, mais cela ne résout pas le problème, mais merci. –