【问题标题】:how to make an array of errors inside of a class如何在类中产生一系列错误
【发布时间】:2020-03-07 14:34:19
【问题描述】:

我希望构造函数验证 $contraseña 和 $rcontraseña 以查看它们是否匹配。 如果他们这样做:散列密码。 如果他们不这样做:创建一个错误数组,其中 $errors[password] 包含一个显示“密码不匹配”的字符串。

我对以下代码的问题是:

var_dump($errores);没有显示字符串,可能是因为我尝试填充它的方式是错误的。该数组在类之外,我也尝试将其设为公共、私有和受保护的属性,但这些都不起作用。

<?php
// Array de errores. Si todo está null es porque no hubo errores.
  $errores = [
  "nombre" => "",
  "apellido" => "",
  "usuario" => "",
  "contraseña" => "",
];

class Usuario {
  /* atributos */
  protected $nombre;
  protected $apellido;
  protected $usuario;
  protected $contraseña;

  /* Métodos. */
  /* Constructor que setea datos, los verifica y hashea contraseña. */
  public function __construct($nombre, $apellido, $usuario, $contraseña, $rcontraseña){
    $this->nombre = $nombre;
    $this->apellido = $apellido;
    $this->usuario = $usuario;
    if ($rcontraseña == $contraseña) {
      $this->contraseña = password_hash($contraseña, PASSWORD_DEFAULT);
    }
    else {
      $errores['contraseña'] = "Las contraseñas no coinciden.";
    }
    // Verificamos que nombre no esté vacío.



  }


}


$emiliano = new Usuario("Emiliano", "Vargas", "emicapo", "emi123", "eemi123");

var_dump($errores);

【问题讨论】:

    标签: php arrays class constructor


    【解决方案1】:

    拥有这个结构的意义

    $emiliano = new Usuario("Emiliano", "Vargas", "emicapo", "emi123", "eemi123");
    

    这样您就可以将$emiliano$fernando 用作两个不同的Usuarios。拥有一个单一的全局 $errores 就达不到目的了。

    你应该会写:

    var_dump($emiliano->errores());
    

    并且有错误仅与该用户有关

    为此,您必须在类中声明错误,并且由于您不需要直接从外部访问它们(函数 errores() 会为您执行此操作),因此您将声明它们 private强>:

    class Usuario {
         /* atributos */
         protected $nombre;
         protected $apellido;
         protected $usuario;
         protected $contraseña;
    
         /* errores, default empty. */
         private $miErrores = [ ];
    

    在类中你需要返回错误

         public function errores() {
             return $this->miErrores;
         }
    
         public function hayError() {
             return count($this->miErrores);
         }
    
         protected function nuevoErrore($errore, $texto) {
             $this->miErrores[$errore] = $texto;
             return $this;
         }
    
         // You might need to remove errors without destroying the object
         protected function borrarErrores() {
             $this->miErrores = [ ];
             return $this;
         }
    

    然后你添加这样的错误:

        $this->nuevoErrore('contraseña', 'Las contraseñas no coinciden.');
    

    您可以快速检查错误,

        if ($emiliano->hayError()) {
             var_dump($emiliano->errores());
             die();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      相关资源
      最近更新 更多