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

php类扩展-同名的属性/方法可以吗?,php,class,extends,Php,Class,Extends,如果您有一个名为“User”的类和另一个扩展了“User”的名为“Admin”的类,并且希望Admin从User继承所有属性和方法,例如_构造方法除外 class User { private $name; function __construct($name) { $this->name = $name; } } 及 这是正确的吗?管理员是否覆盖用户的构造方法?如果扩展类具有相同的方法名,我认为它是无效的。 我完全没有理解类扩展的意义吗?是的,它就是扩展的目的。 您可以覆盖所有方法

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

class User {
private $name;

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

这是正确的吗?管理员是否覆盖用户的构造方法?如果扩展类具有相同的方法名,我认为它是无效的。
我完全没有理解类扩展的意义吗?

是的,它就是扩展的目的。 您可以覆盖所有方法

您甚至可以在子类的方法中使用相同的命名父类


请参阅:

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

但对你来说,我会的

class Admin extends User {
    private $authorization;

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

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

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

请记住,修饰符在这里确实起到了作用,超类中的“private”声明的方法不会被重写,因为它们不会被扩展类继承。在任何情况下,都不能通过扩展类来覆盖“final”声明的方法

class Admin extends User {
    private $authorization;

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