تمتد فئة PHP - السمات/الأساليب بنفس الاسم الموافق؟
سؤال
إذا كان لديك فئة تسمى "مستخدم" وفئة أخرى تسمى "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;
}
}
هل هذا صحيح؟ هل يقوم المسؤول بتجاوز طريقة بناء المستخدم؟ إذا كان للفئة الممتدة نفس اسم الطريقة ، فأفترض أنه غير صالح. هل أفتقد تمامًا نقطة تمديد الفصل؟
المحلول
هذا ليس غير صالح. أحد جوانب الميراث الطبقي هو أنه يمكنك تجاوز الأساليب وتوفير تطبيق آخر.
لكن في حالتك ، سأفعل
class Admin extends User {
private $authorization;
function __construct($name,$authorization) {
parent::__construct($name);
$this->authorization = $authorization;
}
}
كما تقوم بالفعل بتنفيذ "مهمة الاسم" في فئة الأصل. إنه نهج أنظف.
نصائح أخرى
لا ، هذا قانوني تمامًا لأنك تتجاوز مُنشئ المستخدم. بشكل عام ، أساليب مع أسماء مماثلة في توسيع نطاق "تجاوز" الوالدين.
ضع في اعتبارك أن المعدلات تلعب دورًا هنا: لن يتم تجاوز الأساليب "الخاصة" المعلنة في الطبقة الفائقة لأنها غير موروثة عن طريق توسيع الطبقات. لا يمكن تجاوز الأساليب المعلنة "النهائية" عن طريق توسيع الطبقات - تحت أي ظرف من الظروف.
نعم هذا ما يمتد. يمكنك تجاوز جميع الطرق.
يمكنك حتى استخدام نفس الفئة الأصل المسماة داخل الطريقة في فئة الطفل.