Guest User

Untitled

a guest
Jul 24th, 2018
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.02 KB | None | 0 0
  1. /**
  2. * A class e' final o que signifca que nao podera ser extendida, significando que
  3. * nao e possivel herdar da class de forma a circunscrever o singleton
  4. */
  5. final class BaseDeDados
  6. {
  7. /**
  8. * Como nao podemos instanciar a class, nao vamos ter acesso ao $this, como
  9. * tal este membro tera de ser estatico.
  10. *
  11. * @var BaseDeDados
  12. */
  13. protected static $_instancia;
  14.  
  15. private $_ligacao;
  16.  
  17. private $_host;
  18. private $_dbName;
  19. private $_user;
  20. private $_password;
  21. private $_port;
  22. private $_charset;
  23.  
  24. /**
  25. * Como o construtor e privado a instanciacao nao podera ser feita de fora da class
  26. *
  27. * A class verifica se a extencao de mysqli existe e devolverar o handler que
  28. * podera ser usado para todas as queries que tenha de efectuar a uma BD
  29. *
  30. */
  31. private function __construct()
  32. {
  33. if(extension_loaded('mysqli'))
  34. {
  35. $port = isset($this->_port) ? (integer) $this->_port : null;
  36. $this->_ligacao = mysqli_init();
  37.  
  38. $ligacao = @mysqli_real_connect(
  39. $this->_ligacao,
  40. $this->_host,
  41. $this->_user,
  42. $this->_password,
  43. $this->_dbName,
  44. $port
  45. );
  46.  
  47. if (!empty($this->_charset)) {
  48. mysqli_set_charset($this->_ligacao, $this->_charset);
  49. }
  50.  
  51. return $this->_ligacao;
  52. }
  53. else {
  54. trigger_error('A extencion mysqli nao existe');
  55. }
  56. }
  57.  
  58. /**
  59. * Se alguem tentar criar um clone da class, a class emite um erro avisando que
  60. * a clonagem nao e permitida
  61. */
  62. private function __clone()
  63. {
  64. trigger_error('Clonagem nao permitida.', E_USER_ERROR);
  65. }
  66.  
  67. /**
  68. * O retodo retona uma instancia da class garantindo que nao sera criada outra
  69. * caso ela ja exita previamente
  70. *
  71. * @return BaseDeDados
  72. */
  73. public function get_instancia()
  74. {
  75. if (!isset(self::$_instancia)) {
  76. self::$_instancia = new BaseDeDados;
  77. }
  78. return self::$_instancia;
  79. }
  80.  
  81. public function set_configuracao($config=array())
  82. {
  83. if(isset($config['host']))
  84. $this->_host = $config['host'];
  85. if(isset($config['db_name']))
  86. $this->_dbName = $config['db_name'];
  87. if(isset($config['user']))
  88. $this->_user = $config['user'];
  89. if(isset($config['password']))
  90. $this->_password = $config['password'];
  91. if(isset($config['port']))
  92. $this->_port = $config['port'];
  93. if(isset($config['charset']))
  94. $this->_charset = $config['charset'];
  95. }
  96.  
  97. }
  98.  
  99. $config = array(
  100. 'host' => 'localhost',
  101. 'db_name' => 'test',
  102. 'user' => 'root',
  103. 'password' => '',
  104. 'port' => null,
  105. 'charset' => 'UTF-8'
  106. );
  107.  
  108. $a = BaseDeDados::get_instancia();
  109. $a->set_configuracao($config);
  110. $a::query('show tables;');
  111. var_dump($a);
Add Comment
Please, Sign In to add comment