- اینکه هر دو در پیاده سازی الگوی polymorphism استفاده می شن. - هر دو برای پیروی از یک شِماتیک و اسکلت ثابت هستند. - هردو گزینه خوبی برای استاندارد سازی API داخلی هستن. - هردو بهترین گزینه برای کار تیمی/گروهی هستن. - هر دو قوانین استفاده از کلاس رو برای توسعه دهنده اجبار می کنن. - کلاس Abstract در واقع ترکیبی از Interface و کلاس هستش اما Interface یک کلاس مجازی Abstract هستش. - متدهای کلاس Abstract میتونن حاوی کد/محتوا باشن تا یک عملیات رو برای همه کلاس های مصرف کننده فراهم کنن. اما Interface نمی تونه. - کلاس Abstract قابلیت instantiation یا همون new شدن رو نداره. فقط میشه inheritance/extend کردش. - یک کلاس فقط از یک کلاس Abstract می تونه inheritance بشه. (قدرتمند/extend بشه) - یک کلاس(از هر نوعی) میتونه از یک کلاس extend بشه و از صدهزار interface مختلف implement بگیره. - یک Interface می تونه از چندین Interface مختلف extend بشه. - اینترفیس معمولاً در طراحی Listener ها، Callback ها و سازگارسازی کلاس های غیرمرتبط استفاده داره، اما abstract در همه جا. - کلاس Abstract میتونه متد private داشته باشه(غیر abstract)، اما Interface نمی تونه. - کلاس Abstract میتونه فیلد، const و متد داشته باشه. اما Interface فقط می تونه متد(خالی) و const داشته باشه. - یک کلاس معمولی(concrete) باید همه متدهای اینترفیس رو implement کنه، اما در کلاس Abstract اجباری نیست. - سطوح دسترسی متدها و فیلدها در Abstract میتونه public, private, protected باشه. اما در Interface فقط public میتونه باشه. نکته: از PHP 5.3 به بعد مجاز به استفاده از static abstract هستید. نکته 2: هنگام طراحی کلاسهای utility یا full static، استفاده از کلاس Abstract گزینه مناسبیه. نکته 3: معمولاً هنگام طراحی متدهای خالی(stubs)، استفاده از Interface گزینه مناسب تری نسبت به Abstract هست.