2010-02-15 3 views
1

Si vous avez une classe nommée "Utilisateur" et une autre classe nommée "Admin" qui étend "Utilisateur" et que vous souhaitez que l'administrateur hérite de tous les attributs, méthodes de l'utilisateur, à l'exception de la méthode __construct, par exemple.php class extends - attributs/méthodes du même nom ok?

class User { 
private $name; 

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

et

class Admin extends User { 
private $authorization; 

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

Est-ce exact? L'administrateur remplace-t-il la méthode de construction de l'utilisateur? Si la classe d'extension a le même nom de méthode, je suppose que c'est invalide. Est-ce que je manque complètement le point d'extension de classe?

Répondre

2

Il n'est pas invalide. Un aspect de l'héritage des classes est que vous pouvez remplacer les méthodes et fournir une autre implémentation.

Mais dans votre cas, je ferais

class Admin extends User { 
    private $authorization; 

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

que vous implémentez déjà la « cession de nom » dans la classe parente. C'est une approche plus propre.

0

Oui, c'est ce que l'extension est pour. Vous pouvez remplacer toutes les méthodes.

Vous pouvez même utiliser la même classe parent nommée dans la méthode de la classe enfant.

Voir: parent keyword

+0

merci beaucoup pour le lien! – Gal

0

Non, cela est parfaitement légal car vous surchargez le constructeur de l'utilisateur. Généralement parlées, les méthodes avec des noms similaires dans les extensions de classe "remplacent" celles de leurs parents. N'oubliez pas que les modificateurs jouent un rôle ici: les méthodes déclarées "private" dans une superclasse ne seront pas remplacées car elles ne sont pas héritées par l'extension des classes. Les méthodes déclarées "final" ne peuvent pas être remplacées par l'extension de classes - en aucun cas.