Learning PHP: creazione di una classe password

2

Introduzione:
Sono stato un programmatore PHP procedurale. Per alcuni mesi ho seguito i tutorial di OO e ho guardato molti video su questo argomento. È del 100% chiaro che il metodo OO è una programmazione più efficiente, soprattutto perché le dimensioni del mio progetto sono in crescita.

Quindi, quello che voglio imparare è il modo di pensare orientato agli oggetti.

Sappiamo tutti gli esempi di auto e di classe animale. Anche se capisco perché li usano come esempi e perché sono oggetti, non è chiaro quale sia la definizione di un oggetto.

Qual è la definizione di un oggetto?

Il seguente esempio è un buon esempio di un oggetto?

class Password {
    public function random($strength) {
        // Returns a random password with a specific strength
    }
    public function check($password, $strength) {
        // Returns if the password meets the strength requirements
    }
    public function hash($password) {
        // Return a hash created with PHP's password_hash() function
    }
    public function match($password, $hash) {
        // Returns if the password matches the hash using password_verify()
    }
}

Aggiornamento sulla risposta di Greg Burghardt:

Quindi questo sarebbe considerato come orientato agli oggetti?

class Password {
    private $_password;

    public function __construct($password) {
        $this->_password = trim($password);
    }

    public function check($strength) {
        // Returns if the password meets the strength requirements
    }

    public function hash() {
        return password_hash($this->_password, PASSWORD_BCRYPT);
    }

    public function match($hash) {
        return password_verify($this->_password, $hash);
    }
}
    
posta Ramon Bakker 26.01.2017 - 23:13
fonte

1 risposta

3

Un oggetto è una combinazione di stato, sotto forma di proprietà dei dati e comportamento sotto forma di metodi.

Il tuo esempio non sembra contenere alcun stato, e quindi il codice procedurale è racchiuso in un oggetto.

Se hai passato la lunghezza massima e la forza come argomenti al costruttore, avresti lo stato. Questo sarebbe considerato orientato agli oggetti.

Inoltre, ciò che hai creato è un generatore di password che è anche un nome di classe migliore.

$generator = new PasswordGenerator(14, 80);
$password = $generator->random();

Vedendo il tuo codice aggiornato nella tua risposta, sì, il codice aggiornato è orientato agli oggetti poiché stai tenendo traccia della password e esponendo i metodi pubblici che operano su quei dati.

    
risposta data 26.01.2017 - 23:43
fonte

Leggi altre domande sui tag