класс 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;
}
}

Правильно ли это? Переопределяет ли администратор метод построения пользователя? Если расширяемый класс имеет то же имя метода, я полагаю, что он недействителен. Я полностью упускаю смысл расширения класса?

Author: Gal, 2010-02-16

3 answers

Это не является недействительным. Одним из аспектов наследования классов является то, что вы можете переопределять методы и предоставлять другую реализацию.

Но в вашем случае я бы сделал

class Admin extends User {
    private $authorization;

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

Поскольку вы уже реализуете "присвоение имени" в родительском классе. Это более чистый подход.

 4
Author: Felix Kling, 2010-02-15 23:02:12

Нет, это совершенно законно, так как вы переопределяете конструктор пользователя. Как правило, методы с похожими именами в расширяющемся классе "переопределяют" методы своих родителей.

Имейте в виду, что модификаторы здесь играют определенную роль: "частные" объявленные методы в суперклассе не будут переопределены, поскольку они не наследуются путем расширения классов. "окончательные" объявленные методы не могут быть переопределены путем расширения классов - ни при каких обстоятельствах.

 0
Author: aefxx, 2010-02-15 23:08:07

Да, для этого и существует extends. Вы можете переопределить все методы.

Вы даже можете использовать родительский класс с тем же именем внутри метода в дочернем классе.

См.: parent ключевое слово

 0
Author: skyman, 2011-11-13 18:15:42