2010-02-15 56 views
1

例如,如果您有一个名为“User”的类和另一个名为“Admin”的类扩展了“User”,并且您希望Admin继承User的所有属性,方法(例如__construct方法除外)。PHP类扩展 - 具有相同名称的属性/方法好吗?

class User { 
private $name; 

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

class Admin extends User { 
private $authorization; 

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

这是正确的吗?管理员重写用户的构造方法吗?如果扩展类具有相同的方法名称,我认为它是无效的。 我完全错过了课程延伸的观点吗?

回答

2

这不是无效的。类继承的一个方面是,你可以重写方法并提供另一个实现。

但在你的情况,我会做

class Admin extends User { 
    private $authorization; 

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

因为你已经实行“名称分配”中的父类。这是一个更清洁的方法。

0

是的,这是延伸是什么。 您可以覆盖所有方法。

你甚至可以在子类中使用相同的命名父类内部方法。

请参见:parent keyword

+0

非常感谢链接! – Gal 2010-02-15 23:04:41

0

不,这是完全合法的,因为您重写了用户的构造函数。一般来说,扩展类中具有相似名称的方法“覆盖”它们的父类。

请记住,修饰符确实在这里扮演了角色:超类中的“private”声明的方法不会被覆盖,因为它们不会被扩展类继承。任何情况下,“最终”声明的方法都不能通过扩展类来覆盖。

相关问题