ارث بری کردن از چند کلاس

پرسیده شده
فعالیت 1427 روز پیش
دیده شده 1182 بار
0

سلام

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

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

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

 

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

فایل پیوست

amir tavakolian
amir tavakolian

11 خرداد 99

0
حذف شده

سلام.

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

میتونید از 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");

?>

 

فایل پیوست

محسن موحد

توسط

محسن موحد

11 خرداد 99