Domanda

Se si dispone di una classe denominata "Utente" e un altro classe denominata "Admin" che si estende "utente", e si desidera Admin per ereditare tutti gli attributi, i metodi da utente, ad eccezione per il metodo __construct, per esempio.

class User {
private $name;

function __construct($name) {
$this->name = $name;
}
}

e

class Admin extends User {
private $authorization;

function __construct($name,$authorization) {
$this->name = $name;
$this->authorization = $authorization;
}
}

È corretto? Fa metodo di costruzione per l'utente di override Admin? Se la classe che estende ha lo stesso nome del metodo Suppongo che sia valido. Sto totalmente manca il punto di estensione classe?

È stato utile?

Soluzione

Non è valido. Un aspetto di ereditarietà di classe è, che è possibile ignorare i metodi e fornire un'altra implementazione.

Ma nel tuo caso, vorrei fare

class Admin extends User {
    private $authorization;

    function __construct($name,$authorization) {
        parent::__construct($name);
        $this->authorization = $authorization;
    }
}

come già implementato la "assegnazione del nome" nella classe padre. Si tratta di un approccio più pulito.

Altri suggerimenti

No, questo è perfettamente legale come modo si sostituisce il costruttore per l'utente. Generalmente parlato, i metodi con nomi simili a estendere classe "override" dei genitori di.

Occorre tuttavia tenere presente che i modificatori hanno un ruolo qui: "privato" ha dichiarato metodi in una superclasse non avranno ignorato in quanto non sono ereditate estendendo le classi. metodi dichiarati "finali" non possono essere sovrascritte estendendo le classi -. in nessun caso

Sì, è quello che si estende è per. È possibile ignorare tutti i metodi.

È anche possibile utilizzare stessa classe genitore chiamato metodo all'interno della classe del bambino.

Si veda: parent parola

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top