класс 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;
}
}
Правильно ли это? Переопределяет ли администратор метод построения пользователя? Если расширяемый класс имеет то же имя метода, я полагаю, что он недействителен. Я полностью упускаю смысл расширения класса?
3 answers
Это не является недействительным. Одним из аспектов наследования классов является то, что вы можете переопределять методы и предоставлять другую реализацию.
Но в вашем случае я бы сделал
class Admin extends User {
private $authorization;
function __construct($name,$authorization) {
parent::__construct($name);
$this->authorization = $authorization;
}
}
Поскольку вы уже реализуете "присвоение имени" в родительском классе. Это более чистый подход.
Нет, это совершенно законно, так как вы переопределяете конструктор пользователя. Как правило, методы с похожими именами в расширяющемся классе "переопределяют" методы своих родителей.
Имейте в виду, что модификаторы здесь играют определенную роль: "частные" объявленные методы в суперклассе не будут переопределены, поскольку они не наследуются путем расширения классов. "окончательные" объявленные методы не могут быть переопределены путем расширения классов - ни при каких обстоятельствах.
Да, для этого и существует extends. Вы можете переопределить все методы.
Вы даже можете использовать родительский класс с тем же именем внутри метода в дочернем классе.