When defining the structure and inheriting Interface and/or Abstract Class, which one is the best practice? And why? Here are 2 examples:
Here is the example for [Interface] -> [Abstract Class] -> [Class]
Interface DataInterface
{
    public function __construct($connection);
    public function connected();
    public function get();
}
Abstract class BaseData implements DataInterface
{
    protected $connection;
    public function __construct($connection)
    {
        $this->connection = $connection;
    }
}
class UserData extends BaseData
{
    public function exists()
    {
        return is_connected($this->connection);
    }
    public function get()
    {
        return get_data($this->connection);
    }
}
$oUserData = new UserData(new Connection());
And here is the sample for [Abstract Class] -> [Class] without the Interface
Abstract class BaseData
{
    protected $connection;
    public function __construct($connection)
    {
        $this->connection = $connection;
    }
    abstract public function connected();
    abstract public function get();
}
class UserData extends BaseData
{
    public function exists()
    {
        return is_connected($this->connection);
    }
    public function get()
    {
        return get_data($this->connection);
    }
}
$oUserData = new UserData(new Connection());
I am currently creating a small app (might grow larger) and confused on how to implement in the beginning correctly.
By the way, is this declaration for __construct() with parameter make sense in Interface?
public function __construct($connection);
 
     
     
     
    