代码之家  ›  专栏  ›  技术社区  ›  Gal

PHP类扩展-具有相同名称的属性/方法可以吗?

  •  2
  • Gal  · 技术社区  · 16 年前

    如果您有一个名为“user”的类和另一个名为“admin”的扩展名为“user”的类,并且您希望admin从用户继承除\ 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;
    }
    }
    

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

    3 回复  |  直到 14 年前
        1
  •  4
  •   Felix Kling    16 年前

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

    但在你的情况下,我会的

    class Admin extends User {
        private $authorization;
    
        function __construct($name,$authorization) {
            parent::__construct($name);
            $this->authorization = $authorization;
        }
    }
    

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

        2
  •  0
  •   aefxx    16 年前

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

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

        3
  •  0
  •   NullUserException Mark Roddy    14 年前

    是的,这就是延伸的目的。 您可以重写所有方法。

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

    参见: parent keyword

    推荐文章