🔥 با کمک هوش مصنوعی در کمتر از 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");
?>

 

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