Ver Mensaje Individual
  #6 (permalink)  
Antiguo 18/09/2012, 23:05
Avatar de abimaelrc
abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: atributo private como era?

¿Esto sería correcto?
Código PHP:
Ver original
  1. <?php
  2. interface StorageInterface{
  3.     public function modStorage(array $params);
  4.     public function getStorage();
  5. }
  6.  
  7. class Db implements StorageInterface{
  8.     private $_storage;
  9.  
  10.     public function __construct(array $params)
  11.     {
  12.         if( count($params) == 3 && array_key_exists('user', $params) && array_key_exists('pwd', $params) && array_key_exists('dsn', $params) ){
  13.             $this->_storage['db'] = new PDO($params['dsn'], $params['user'], $params['pwd']);
  14.         }
  15.     }
  16.  
  17.     public function modStorage(array $params)
  18.     {
  19.         $p = $this->_storage['db']->prepare($params['qry']);
  20.         if( array_key_exists('params', $params) ){
  21.             foreach($params['params'] as $k => $v){
  22.                 $p->bindValue($k, $v, ( ( ctype_digit($v) ) ? PDO::PARAM_INT : PDO::PARAM_STR ));
  23.             }
  24.         }
  25.         $p->execute();
  26.  
  27.         $this->_storage['result'] = $p;
  28.     }
  29.  
  30.     public function getStorage(){ return $this->_storage; }
  31. }
  32.  
  33. class Session implements StorageInterface{
  34.     private $_storage;
  35.  
  36.     public function __construct($sessionName = 'PHPSESSID')
  37.     {
  38.         session_name($sessionName);
  39.         session_start();
  40.         $this->_storage = $_SESSION;
  41.     }
  42.  
  43.     public function modStorage(array $params)
  44.     {
  45.         if( count($params) > 0 ){
  46.             foreach($params as $k => $v){
  47.                 $_SESSION[$k] = $v;
  48.             }
  49.         }
  50.  
  51.         $this->_storage = $_SESSION;
  52.     }
  53.  
  54.     public function getStorage(){ return $this->_storage; }
  55. }
  56.  
  57. class Fdw68{
  58.     private $_storage;
  59.  
  60.     public function __construct(StorageInterface $storage)
  61.     {
  62.         $this->_storage = $storage;
  63.     }
  64.  
  65.     public function getStorage()
  66.     {
  67.         return $this->_storage->getStorage();
  68.     }
  69.  
  70.     public function modStorage(array $params)
  71.     {
  72.         $this->_storage->modStorage($params);
  73.     }
  74. }
  75.  
  76. /**
  77.  * Sessions
  78.  */
  79. $storage = new Session();
  80. $fdw68 = new Fdw68($storage);
  81. $arr = array('fdw' => '68');
  82. $fdw68->modStorage($arr);
  83. var_dump($fdw68->getStorage());
  84.  
  85. /**
  86.  * PDO
  87.  */
  88. $storage = new Db(array( 'dsn'  => 'mysql:dbname=test;host=localhost',
  89.                          'user' => 'root',
  90.                          'pwd'  => '' ));
  91. $fdw68 = new Fdw68($storage);
  92.  
  93. /**
  94.  * Insert
  95.  */
  96. $arr = array(
  97.     'qry' => 'INSERT INTO test VALUES(null, :foo, :closed, :created_datetime)',
  98.     'params' => array(
  99.         ':foo' => 'a',
  100.         ':closed' => '1',
  101.         ':created_datetime' => date('Y-m-d H:i:s'),
  102.     ),
  103. );
  104. $fdw68->modStorage($arr);
  105. $r = $fdw68->getStorage();
  106. var_dump($r['db']->lastInsertId());
  107.  
  108. /**
  109.  * Select
  110.  */
  111. $arr = array(
  112.     'qry' => 'SELECT * FROM test',
  113. );
  114. $fdw68->modStorage($arr);
  115. $r = $fdw68->getStorage();
  116. var_dump($r['result']->fetchAll(PDO::FETCH_ASSOC));

Oh por Dios, me quedé pegado haciendo esto solo para saber si entendí lo de DI

Lamento el tanto código es que queria prepararlo con ejemplo casi real

Lo hice así para saber si es correcta la implementación, de esa forma sabré que tan bueno es usar DI y lo que haya hecho en ese código Me gustaría saber que filosofias implemente en el código (si alguna) para ir estudiando mejor lo que hice

Edito: y si es un fiasco también
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 18/09/2012 a las 23:15