استدعاء الإعلان الأول لـ FOO من فئة ممتدة تعلن أنها فو خاصة

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

  •  26-09-2019
  •  | 
  •  

سؤال

<?php
class a {
    public function foo() {
        echo __METHOD__ . PHP_EOL;
    }
}
class b extends a {
    public function foo() {
        $this->foo(); # I want to call a's foo method here.
        echo __METHOD__ . PHP_EOL;
    }
}
class c extends a {
    public function foo() {
        echo __METHOD__ . PHP_EOL;
        $this->foo(); # I want to call a's foo method here.
    }
}
class d extends a {
    # This class does not handle anything super special in our foo step, so I don't over write a's foo();
}
$a = new a; $a->foo();
$b = new b; $b->foo();
$c = new c; $c->foo();
$d = new d; $d->foo();
?>

أنا متأكد من أن هناك القليل منكم يخدش رأسك في محاولة لمعرفة سبب رغبتي في فعل شيء كهذا ، لذلك أعدك أن هذا سيكون منطقيًا ، فقط اسمحوا لي أن أشرح.

لديّ وظيفة تعمل بشكل جيد من خلال نفسها ولدي بعض الفئات الأخرى التي تمتد على الفئة الأساسية لإضافة بعض الوظائف إليها ، فإن هذه الفئات تفعل نفس المهمة ولكن في سياق مختلف أو بمعلومات إضافية بحيث يجب أن تفعل الجميع من خطوات الفصل الأصل ولكن يجب عليهم أيضًا القيام ببعض المجموعات الفرعية الخاصة في بعض الحالات.

هل هناك طريقة لا يزال بإمكاني تنفيذ طريقة FOO الخاصة بـ A وطريقة فصولي الفرعية؟

أعلم أنه يمكنني إصلاح هذا مع بعض الاختراقات الفظيعة مثل جعل الطريقة ملفًا ، ومن ثم تضمين هذا الملف في كل من الدالة الأصل وأشقائه عند الحاجة ، أو يمكنني إنشاء طريقة ثانية تسمى BAR () التي تحتوي على تعليمات من foo () و اطلب من فصولي الفرعية الكتابة فوق foo () ولكن Call Bar () عندما يحتاجون إلى وظيفة Foo (). أنا فقط أتساءل عما إذا كان بإمكاني القيام بذلك دون استخدام بعض الاختراقات المثيرة للاهتمام ، هل هناك شيء لا أعرفه عن PHP أن شخصًا ما هنا يمكن أن يعلمني؟

هل كانت مفيدة؟

المحلول

يمكنك تجربة الوالدين :: foo () ؛

في فئة C:

public function bar(){
  return parent::foo();
}

يرى مثال 3 في دليل PHP على قرار النطاق

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