При определении структуры и наследования интерфейса и/или абстрактного класса, какой из них является лучшей практикой? И почему? Вот 2 примера:PHP-интерфейс и абстрактная классная передовая практика для наследования?
Вот пример [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());
А вот образец для [Реферат класса] -> [Class] без интерфейса
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);
Интерфейсы и тезисы - это совершенно разные вещи с совершенно разными целями, поэтому вы не можете реально сравнивать их таким образом. –
Я вижу различия, но не могу понять разницу в практическом смысле :(Потому что оба они работают если я хочу наследовать от одного интерфейса? Хотя он может реализоваться из нескольких интерфейсов, правильно? Спасибо! – user702300
Мой плохой скриншот неправильного кода для второго примера –