Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

atributo private como era?

Estas en el tema de atributo private como era? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. una duda basica... los atributo private de una clase... si hago una instancia... no la puedo acceder no? pense que si....se podia si...le coloco public... ...
  #1 (permalink)  
Antiguo 15/09/2012, 16:35
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 14 años, 6 meses
Puntos: 5
atributo private como era?

una duda basica...

los atributo private de una clase... si hago una instancia... no la puedo acceder no?

pense que si....se podia


si...le coloco public... si (desde la instancia)

si es static... desde cualquier lado.. colocando creo .... self y el nombre de la clase y dos puntos "::"


bueno y los protected... se acceden desde las subclases... (herencia)


no me acordaba....
  #2 (permalink)  
Antiguo 15/09/2012, 16:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: atributo private como era?

¿Cual es la duda?

Si tienes dudas siempre el Manual tiene toda la información: http://php.net/manual/en/language.oop5.visibility.php
  #3 (permalink)  
Antiguo 15/09/2012, 21:17
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 14 años, 6 meses
Puntos: 5
Respuesta: atributo private como era?

la duda , era si me equivocaba en algo...

-----------------------------------

hola , otra cosa...

cuando utilizo clase y objetos , por ejemplo el de la conexion a la base de datos. donde tambien tiene para hacer las consultas...

como es mejor utilizarla? accedo a las funciones y variables de la clase,

o genero una instacia de la clase para cada conexion,,, ... creo que es mejor generar una instancia, aunque creo haber visto , que se usa directamente desde la clase...
  #4 (permalink)  
Antiguo 18/09/2012, 18:44
Avatar de xArchangellx  
Fecha de Ingreso: octubre-2008
Ubicación: Peru
Mensajes: 208
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: atributo private como era?

Para la conexion utiliza el metodo static, lo he leido en muchos foros
  #5 (permalink)  
Antiguo 18/09/2012, 18:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: atributo private como era?

Static es pensar como en un Singleton, no es para nada lo correcto, lo correcto es inyección de dependencias, pero eso ya es algo para otro tema muy diferente.
  #6 (permalink)  
Antiguo 18/09/2012, 23:05
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 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
  #7 (permalink)  
Antiguo 19/09/2012, 06:52
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: atributo private como era?

Te dejo una referencia abimael, que talves tomaste de base ya que tiene lo mismo un storage http://fabien.potencier.org/article/...ency-injection, creo que es bastante clara, no hay mucho misterio en DI, en su expresión mas básica es algo realmente sencill, ahora si quieres ver una excelente implementacion de DI puedes mirar Zend\DI http://framework.zend.com/manual/2.0...roduction.html.
__________________
http://es.phptherightway.com/
thats us riders :)
  #8 (permalink)  
Antiguo 19/09/2012, 07:20
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: atributo private como era?

Bueno pues creo que entendi y lo que hice es lo que entendi Lo que hace el código es instanciar una de las dos clases sea db o session y trabajar esas clases en la de Fdw68. Creo que entendí si no pues algo esta mal en mi cerebro

Edito:
Dependency es solo el proceso de pasar lo que voy a usar para almacenar data o lo que quiera lograr hacer, sea por medio de constructor, setter o directo a una propiedad (no recomendado en ningun momento, bueno y si hay algún momento que se deba hacer lo aprenderé luego en la vida ). Todo lo demas que hice fue entonces un demo para lo que se puede lograr luego de hacer DI. Para quedar claro DI es simplemente esto
Código PHP:
Ver original
  1. $storage = new Session();
  2. $fdw68 = new Fdw68($storage); // aquí es cuando ocurre el DI
  3.  
  4. $storage = new Db(array( 'dsn'  => 'mysql:dbname=test;host=localhost',
  5.                          'user' => 'root',
  6.                          'pwd'  => '' ));
  7. $fdw68 = new Fdw68($storage); // aquí es cuando ocurre el DI
Ya creo que se me aclaro la situación si estoy correcto claro esta
__________________
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; 19/09/2012 a las 07:32
  #9 (permalink)  
Antiguo 19/09/2012, 09:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: atributo private como era?

Claro, eso es lo que es DI, un contenedor te ayuda a "automatizar eso" pero ya es otra cosa diferente, en planos simples, eso es lo que es DI
  #10 (permalink)  
Antiguo 19/09/2012, 11:43
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: atributo private como era?

Ya me siento grande Bueno ahora a leer otra cosa
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: clase, private, atributos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:10.