interface ها

پرسیده شده
فعالیت 1127 روز پیش
دیده شده 698 بار
1

سلام

 

چه زمانی از interface ها و چه زمانی از abstract class ها استفاده میشه؟ درواقع چه زمانی یکی را بر دیگری ترجیح می دهیم.

فایل پیوست

علی.
علی.

12 فروردین 00

2
حذف شده

سلام و احترام

interface ها زمانی استفاده میشه که شما فقط بخوای یک قرار دادی تعریف کنید که هر کسی که این interface رو implement کردن مجبور بشه که متدهای داخل رو پیاده سازی کنه

<?php
interface InterfaceName 
{
  public function someMethod1();
  public function someMethod2($name, $color);
  public function someMethod3() : string;
}

اما توی abstract کلاس ها شما هم میتونید یک سری قوانین تعریف کنید که هر کسی این abstract کلاس رو extend کرد پیاده سازی کنه و هم همزمان میتونید متدهایی داخلش داشته باشید که پیاده سازی شدند و توی تمامی کلاس هایی که این abstract کلاس رو extend میکنند مشترک و قابل استفاده است.

abstract class AbstractClass
{
    // Force Extending class to define this method
    abstract protected function getValue();
    abstract protected function prefixValue($prefix);

    // Common method
    public function printOut() {
        print $this->getValue() . "\n";
    }
}


class ConcreteClass1 extends AbstractClass
{
    protected function getValue() {
        return "ConcreteClass1";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass1";
    }
}

class ConcreteClass2 extends AbstractClass
{
    public function getValue() {
        return "ConcreteClass2";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass2";
    }
}

$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue('FOO_') ."\n";

$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue('FOO_') ."\n";

همون طور که در کد بالا مشخصه توی abstract کلاس ما دوتا متد abstract تعریف کردیم که هر کلاسی که اون رو extend کرد باید پیاده سازیش کنه و هم یه متد که بین همشون مشترکه به اسم printOut هم تعریف کردیم که بین تمامی کلاس هایی که abstract مارو extend کردن مشترکه و کار مشخصی رو انجام میده

خروجی ها

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2
فایل پیوست

امیر صالحی

توسط

امیر صالحی

14 فروردین 00