تمتد فئة PHP - السمات/الأساليب بنفس الاسم الموافق؟

StackOverflow https://stackoverflow.com/questions/2269544

  •  20-09-2019
  •  | 
  •  

سؤال

إذا كان لديك فئة تسمى "مستخدم" وفئة أخرى تسمى "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;
    }
}

كما تقوم بالفعل بتنفيذ "مهمة الاسم" في فئة الأصل. إنه نهج أنظف.

نصائح أخرى

لا ، هذا قانوني تمامًا لأنك تتجاوز مُنشئ المستخدم. بشكل عام ، أساليب مع أسماء مماثلة في توسيع نطاق "تجاوز" الوالدين.

ضع في اعتبارك أن المعدلات تلعب دورًا هنا: لن يتم تجاوز الأساليب "الخاصة" المعلنة في الطبقة الفائقة لأنها غير موروثة عن طريق توسيع الطبقات. لا يمكن تجاوز الأساليب المعلنة "النهائية" عن طريق توسيع الطبقات - تحت أي ظرف من الظروف.

نعم هذا ما يمتد. يمكنك تجاوز جميع الطرق.

يمكنك حتى استخدام نفس الفئة الأصل المسماة داخل الطريقة في فئة الطفل.

يرى: parent الكلمة الرئيسية

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top