🔥 با کمک هوش مصنوعی در کمتر از 6 ماه فول‌استک شوید ...
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ قدسی مجتهدی
ارث بری کردن از چند کلاس
استاد ماندیس بحرینی حل شده توسط استاد ماندیس بحرینی

سلام

در درس مربوط به inheritence ؛ کلاس‌های user, folder , task از کلاس Basemodel فقط عملیات مربوط

به crud رو ارث بری کردند.

سوالم اینه که اگه یک عملیاتی دیگه ای باشه که بین تمام کلاس‌ها مشابه باشه؛ اون رو در یک کلاس جدا مثلا (baseEdit) میذاریم ولی نمیشه همزمان از چندتا کلاس extend کرد.

 

حالا باید چکار کنیم؟ آیا میشه از trait‌ها استفاده کنیم ؟

سلام.

راه‌های مختلفی وجود داره.

میتونید از trait استفاده کنید.

میتونید از interface‌ها استفاده کنید و یک کلاس(َA) چندین interface رو پیاده سازی کنه و کلاس‌های دیگه، کلاس (A) رو extend کنن.

 

یک روش دیگه هم جهت تنوع برای پیاده سازی میارم و از متد __call  و reflection‌ها کمک میگیرم.

متد کلاس C خصوصی(private) هست:

<?php
class B {
  public function methodB($s) {
    echo $s;
  }
}
class C {
  private function methodC($s) {
    echo $s;
  }
}
class A extends B
{
  public function __call($method, $args)
  {
    $method = new ReflectionMethod('C', $method);
    if ($method->isPrivate()) {
      $method->setAccessible(true);
    }
    $method->invokeArgs(new C(), [$args[0]]);
  }
}
$a = new A;
$a->methodB("7learn.ac");
$a->methodC("PHP Expert");
?>

 

بهترین پاسخ
استاد ماندیس بحرینی ۱۱ خرداد ۱۳۹۹، ۱۸:۴۸