Это немного общий вопрос программирования, а не специфический для PHP - любой шаблон проектирования ООП и применяется к любому языку ООП в той или иной форме. Наиболее часто используются Singleton, Factory, Facade и Repository. Вы можете реализовать любой шаблон, который вам нравится, так же, как вы можете, на других языках, таких как Java. Я дам вам пару примеров реализации - не используйте его как производственный код, они упрощенные примеры.
Шаблон Factory полезен, когда вам нужно решить классы.
Использование: у вас есть API, который позволяет администратору отклонять или одобрять новый запрос на создание пользователя - администратор просто передает конечной точке API строку 'approve'
или 'reject'
. Но мы никогда не работаем со струнами. Когда-либо. Вместо этого мы хотим представить действия в классах, реализующих общий интерфейс Action
. Мы можем реализовать Factory для решения класса из предоставленной строки следующим образом:
interface Action
{
public function getUsername(): string;
}
class Approve implements Action
{
private $username;
public function __construct(string $username)
{
$this->username = $username;
}
public function getUsername(): string
{
return $this->username;
}
}
class Reject implements Action
{
private $username;
public function __construct(string $username)
{
$this->username = $username;
}
public function getUsername(): string
{
return $this->username;
}
}
class ActionFactory
{
public static function create(string $action, string $username): Action
{
switch (strtoupper($action)) {
case 'APPROVE':
return new Approve($username);
break;
case 'REJECT':
return new Reject($username);
break;
default:
throw new \InvalidArgumentException("Expected string `APPROVE` or `REJECT` - `$action` provided");
}
}
}
(Бонусные баллы за заметив, что мы реализации двух шаблонов проектирования здесь: одноплодной & завод)
фасадная модель также используется много (фасады Laravel - это НЕ фасады, не путайте их с реальными фасадами). Наиболее частое использование шаблона фасада - это подключение базы данных к репозиторию. Опять же, здесь будут два шаблона: шаблон фасада и шаблон хранилища. Я оставлю тела методов для этого, но это должно дать вам представление об использовании. Я не рекомендую на самом деле использовать методы ниже - это невероятно упрощено для примера.
class Connection
{
public function __construct(string $connectionString);
public function update(string $table, string $query);
public function insert(string $table, array $data);
}
class UserRepository
{
public function __construct(Connection $connection);
public function createUser(User $user)
{
$this->connection->insert('users', $user->toArray());
}
}
Вы могли бы иметь столько репозиториев, как вы хотите, и все они будут принимать Connection
фасад в качестве зависимости в их конструктор, который обеспечивает взаимодействие с базой данных.
Зачем голосовать за это? Хорошо знать, что использование шаблонов шаблонов в PHP. –
Посмотрите на http://www.phptherightway.com/pages/Design-Patterns.html, но @NathanKing прав – indofraiser
Я присоединяюсь к @ nathan-king и indorraiser, что это скорее общий вопрос программирования. Вы также можете проверить https://laracasts.com/series/design-patterns-in-php. Обратите также внимание на то, что CodeIgniter не соответствует современным тенденциям, происходящим в мире PHP за последние 6-7 лет, поскольку Я вижу, вы увидите меньше шаблонов проектирования в мире CI по сравнению, например. Symfony, Laravel, Zend или Phalcon. Это также указано на странице приветствия их документов: «_a framework, который не требует от вас соблюдения ограничительных правил кодирования.» –