¿Esto sería correcto?
Código PHP:
Ver original<?php
interface StorageInterface{
public function modStorage
(array $params); public function getStorage();
}
class Db implements StorageInterface{
private $_storage;
public function __construct
(array $params) {
$this->_storage['db'] = new PDO($params['dsn'], $params['user'], $params['pwd']);
}
}
public function modStorage
(array $params) {
$p = $this->_storage['db']->prepare($params['qry']);
foreach($params['params'] as $k => $v){
$p->bindValue($k, $v, ( ( ctype_digit($v) ) ? PDO
::PARAM_INT : PDO
::PARAM_STR )); }
}
$p->execute();
$this->_storage['result'] = $p;
}
public function getStorage(){ return $this->_storage; }
}
class Session implements StorageInterface{
private $_storage;
public function __construct($sessionName = 'PHPSESSID')
{
$this->_storage = $_SESSION;
}
public function modStorage
(array $params) {
if( count($params) > 0 ){ foreach($params as $k => $v){
$_SESSION[$k] = $v;
}
}
$this->_storage = $_SESSION;
}
public function getStorage(){ return $this->_storage; }
}
class Fdw68{
private $_storage;
public function __construct(StorageInterface $storage)
{
$this->_storage = $storage;
}
public function getStorage()
{
return $this->_storage->getStorage();
}
public function modStorage
(array $params) {
$this->_storage->modStorage($params);
}
}
/**
* Sessions
*/
$storage = new Session();
$fdw68 = new Fdw68($storage);
$arr = array('fdw' => '68'); $fdw68->modStorage($arr);
/**
* PDO
*/
$storage = new Db
(array( 'dsn' => 'mysql:dbname=test;host=localhost', 'user' => 'root',
'pwd' => '' ));
$fdw68 = new Fdw68($storage);
/**
* Insert
*/
'qry' => 'INSERT INTO test VALUES(null, :foo, :closed, :created_datetime)',
':foo' => 'a',
':closed' => '1',
':created_datetime' => date('Y-m-d H:i:s'), ),
);
$fdw68->modStorage($arr);
$r = $fdw68->getStorage();
/**
* Select
*/
'qry' => 'SELECT * FROM test',
);
$fdw68->modStorage($arr);
$r = $fdw68->getStorage();
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