💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ amir tavakolian
ارث بری کردن از چند کلاس
محسن موحد حل شده توسط محسن موحد

سلام

در درس مربوط به 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");
?>

 

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