Number one question on every PHP interview

I am a PHP programmer and have been on many job interviews. I noticed that on each of them one question always came up.

That question is:

What's the difference between abstract class and interface?

The answer to this question is simple and proves the candidate's familiarity with object-oriented programming.

So let's compare these two:

Abstract class

  • It can provide some functionality and leave the rest for the derived class.
  • The derived class may or may not override the concrete functions defined in the base class.
  • A child class extended from an abstract class should logically be related.

To declare class to be abstract just simply abstract before class keyword

Interface

  • It cannot contain any functionality. It only contains definitions of the methods.
  • The derived class MUST provide code for all the methods defined in the interface.
  • Completely different and non-related classes can be logically grouped together using an interface.

To declare interface use interface keyword

interface Template
{
    public function setVariable($name, $var);
    public function getHtml($template);
}

22