При определении структуры и наследования интерфейса и/или абстрактного класса, какой из них является лучшей практикой? И почему? Вот два примера:
Вот пример для [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());
И вот образец для [Абстрактного класса] → [Класс] без интерфейса
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());
В настоящее время я создаю небольшое приложение (может увеличиться) и путаюсь, как правильно реализовать в начале.
Кстати, это объявление для __construct() с параметром имеет смысл в интерфейсе?
public function __construct($connection);