php类扩展 - 同名的属性/方法好吗?

时间:2010-02-15 22:59:39

标签: php class extends

如果您有一个名为“User”的类和另一个名为“Admin”的扩展“User”的类,并且您希望Admin继承User的所有属性和方法,例如__construct方法除外。

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;
}
}

这是对的吗? Admin是否覆盖User的构造方法?如果扩展类具有相同的方法名称,我认为它是无效的。 我是否完全忽略了课程延伸的重点?

3 个答案:

答案 0 :(得分:4)

这不是无效的。类继承的一个方面是,您可以覆盖方法并提供另一种实现。

但在你的情况下,我会做

class Admin extends User {
    private $authorization;

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

因为您已在父类中实现“名称分配”。这是一种更清洁的方法。

答案 1 :(得分:0)

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

您甚至可以在子类中使用相同的命名父类in method。

请参阅:parent keyword

答案 2 :(得分:0)

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

请记住,虽然修饰符在这里发挥作用:超类中的“私有”声明方法不会被覆盖,因为它们不会通过扩展类继承。 声明的方法不能通过扩展类来覆盖 - 在任何情况下都不能。