Evgenii Legotckoi
Sept. 17, 2018, 5:48 p.m.

Example - Abstract Factory in PHP

An example of a design pattern An abstract factory in PHP


  1. <?php
  2. /*
  3. * Abstract Factory classes
  4. */
  5.  
  6. abstract class DB_Abstraction_Factory {
  7. protected $settings = array();
  8. protected function __construct() {
  9. $this->settings = Settings::getInstance();
  10. }
  11.  
  12. abstract public function createInstance();
  13. }
  14.  
  15. class DB_Abstraction_Factory_ADODB extends DB_Abstraction_Factory {
  16. public function __construct() {
  17. parent::__construct();
  18. }
  19. public function createInstance() {
  20. require_once('/path/to/adodb_lite/adodb.inc.php');
  21. $dsn = $this->settings['db.dsn'];
  22. $db = ADONewConnection($dsn);
  23. return $db;
  24. }
  25. }
  26.  
  27. class DB_Abstraction_Factory_MDB2 extends DB_Abstraction_Factory {
  28. public function __construct() {
  29. parent::__construct();
  30. }
  31. public function createInstance() {
  32. require_once 'MDB2.php';
  33. $dsn = $this->settings['db.dsn'];
  34. $db = MDB2::factory($dsn);
  35. return $db;
  36. }
  37. }
  38.  
  39. class DB_Abstraction_AbstractFactory {
  40. public static function getFactory() {
  41. $settings = Settings::getInstance();
  42. switch($settings['db.library'])
  43. {
  44. case 'adodblite':
  45. $factory = new DB_Abstraction_Factory_ADODBLITE();
  46. break;
  47. case 'mdb2';
  48. $factory = new DB_Abstraction_Factory_MDB2();
  49. break;
  50. }
  51. return $factory;
  52. }
  53. }
  54.  
  55. /*
  56. * Client's code
  57. */
  58.  
  59. // instantiate Abstract Factory
  60. $abstractfactory = new DB_Abstraction_AbstractFactory();
  61.  
  62. // fetch a concrete Factory (decision handled in Abstract Factory static method)
  63. $factory = $abstractfactory::getFactory();
  64.  
  65. // use concrete Factory to create a database connection object from
  66. // the selected database abstraction library
  67. $db = $factory->createInstance();
  68. ?>

Do you like it? Share on social networks!

Comments

Only authorized users can post comments.
Please, Log in or Sign up
  • Last comments
  • AK
    April 1, 2025, 11:41 a.m.
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    March 9, 2025, 9:02 p.m.
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    March 9, 2025, 4:14 p.m.
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
  • ИМ
    Nov. 22, 2024, 9:51 p.m.
    Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
  • Evgenii Legotckoi
    Oct. 31, 2024, 11:37 p.m.
    Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup