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

Cuando usar PRIVATE o PROTECTED

Estas en el tema de Cuando usar PRIVATE o PROTECTED en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buen dia y muchas gracias por detenerse a leer este tema. EJEMPLO: Se tiene una claseX con un metodoY que recibe como parametro un array, ...
  #1 (permalink)  
Antiguo 11/01/2012, 12:31
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Cuando usar PRIVATE o PROTECTED

Buen dia y muchas gracias por detenerse a leer este tema.

EJEMPLO:

Se tiene una claseX con un metodoY que recibe como parametro un array, en este metodoY se realizan unos trabajos y dependiendo del resultado se retorna un array con varios valores:

Código PHP:
Ver original
  1. class claseX{
  2.  
  3.     public function metodoY($arrayParametro){
  4.         //realizando trabajos con $arrayParametro
  5.         if($trabajos == 'ok'){
  6.             $resultado = array('TRUE', 17);
  7.         }else{
  8.             $resultado = array('FALSE', 16);
  9.         }
  10.         return $resultado;
  11.     }
  12. }

PREGUNTAS:

1. Debo definir $arrayParametro y $resultado como private al principio de la clase o una de las dos o ninguna?

Código PHP:
Ver original
  1. class claseX{
  2.     private $arrayParametro, $resultado;
  3.         // mas códigos aquí
  4. }

2. Si hace necesario crear un método constructor para la clase sabiendo que todos los métodos deberán retornar el array $resultado ?

Código PHP:
Ver original
  1. class claseX{
  2.    
  3.     private $arrayParametro, $resultado;
  4.    
  5.     public function __construct(){
  6.         $this->resultado = array();
  7.     }
  8.  
  9.     public function metodoY($arrayParametro){
  10.         //realizando trabajos con $arrayParametro
  11.         if($trabajos == 'ok'){
  12.             $this->resultado[0] = 'TRUE';
  13.             $this->resultado[1] = 17;
  14.         }else{
  15.             $this->resultado[0] = 'FALSE';
  16.             $this->resultado[1] = 16;
  17.         }
  18.         return $this->resultado;
  19.     }
  20. }
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #2 (permalink)  
Antiguo 11/01/2012, 13:56
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Cuando usar PRIVATE o PROTECTED

Bueno, estuve investigando y me doy cuenta que colocar $arrayParametro como PRIVATE no esta mal ya que no voy a utilizarlo fuera de la clase así que esta acertado (creo) pero me quedan las dudas de $resultado y del constructor.

En cuanto a PROTECTED tampoco es necesario ya que no utilizo subclases o herencias dentro de la claseX así que con PRIVATE es mas que suficiente.

Alguien me puede ayudar con las dudas ?
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #3 (permalink)  
Antiguo 11/01/2012, 14:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Cuando usar PRIVATE o PROTECTED

De hecho, si los valores no los vas a usar fuera de tu función, no es necesario ni que los definas como propiedades, ya que los puedes usar localmente y hace el código más legible.

Definir las propiedades solamente es para cuando quieras re-utilizar el valor de la variable en algún otro método de tu clase.

Saludos.
  #4 (permalink)  
Antiguo 11/01/2012, 14:25
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Cuando usar PRIVATE o PROTECTED

O.o muchas gracias por responder GatorV

Entonces según tu respuesta no es necesario utilizar el private en ninguno de los dos casos ? ya que no utilizare esos datos fuera de la clase.

Ahora bien, que me dices del método constructor para el array que se retorna ? no es necesario inicializarlo en el constructor ? no es necesario declararlo como privado ? pero para que declararlo privado si a la final lo voy a retornar ?
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #5 (permalink)  
Antiguo 11/01/2012, 14:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Cuando usar PRIVATE o PROTECTED

Exacto, como te digo es lo mismo, si solo vas a retornar ese resultado, y no lo vas a usar en ninguna otra parte de tu clase no necesitas declararlo, ya que simplemente con que hagas:
Código PHP:
Ver original
  1. public function foo()
  2. {
  3.       $arr = array();
  4.       // cosas
  5.       return $arr;
  6. }

Funciona y queda más legible, como te dije antes, la idea de declararlas como propiedades de la clase es que las uses en otros métodos.
  #6 (permalink)  
Antiguo 11/01/2012, 14:37
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Cuando usar PRIVATE o PROTECTED

Muchisimas gracias GatorV me queda clarisimo

Colocandole logica al asunto y mirando la respuesta del amigo GatorV como ese array $resultado no va a tener un valor especifico para todos los metodos entonces no es necesario colocarlo en el contructor, lo mas logico seria sacarlo del constructor y manejar un array por cada metodo y retornarlo:

Código PHP:
Ver original
  1. metodoY($arrayParametro){
  2. $resulatado = array('TRUE', 17);
  3. return $resultado;
  4. }
  5.  
  6. metodoZ($arrayParametro1){
  7. $resulatado = array('TRUE', 20);
  8. return $resultado;
  9. }

Otro caso seria que ese array $resultado tuviese los mismos datos para toda la claseX, entonces lo colocaría como propiedad de la clase y retornaría siempre la misma propiedad.

Esos TIPS estan buenísimos, ojala todos los tutoriales fueran así de simples y no se complicaran la vida con la "Clase carro".

Pregunta: ¿ Entonces cuando se hace realmente necesario declarar algo como PRIVATE en una clase ? si se sabe que solo sera utilizada en esa clase no es necesario utilizarlo (se omite) pero en cuanto tutorial o manual miro todos usan private en las clases no se porque si realmente se puede omitir.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #7 (permalink)  
Antiguo 11/01/2012, 15:15
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Cuando usar PRIVATE o PROTECTED

Pregunta: ¿ Entonces cuando se hace realmente necesario declarar algo como PRIVATE en una clase ? si se sabe que solo sera utilizada en esa clase no es necesario utilizarlo (se omite) pero en cuanto tutorial o manual miro todos usan private en las clases no se porque si realmente se puede omitir.

Estuve colocándole lógica a la pregunta que hice... y me doy cuenta que solo se debería colocar ese PRIVATE cuando se tiene una propiedad de la clase en el método constructor, para que colocar un PRIVATE sabiendo que no se va a utilizar en el constructor ? para que colocarle un PRIVATE a una variable que solo se va a usar en un método ?

Estoy errado o esta bien lo que yo planteo ?
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #8 (permalink)  
Antiguo 12/01/2012, 19:04
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Cuando usar PRIVATE o PROTECTED

Cita:
Miembros de clases declarados como public pueden ser accedidos de cualquier lado. Miembros declarados como protected, sólo de la clase misma, por herencia y clases parent. Aquellos definidos como private, únicamentede la clase que los definió.
No tienen que ver con el método constructor, se refiere a todos los métodos y propiedades de tu clase. Ambos usan la visibilidad.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #9 (permalink)  
Antiguo 12/01/2012, 20:40
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Cuando usar PRIVATE o PROTECTED

el dilema es lo que indicas es que utilizaste una variable local dentro de tu metodo, para lo que no es necesario crear un atributo, pero si hay atributos que son utilizados en varios metodos no es necesario??, ejemplo sencillo una clase generica de persona con sus getter y setter para el nombre

Código PHP:
Ver original
  1. class Persona
  2. {
  3.     private $nombre;
  4.     public function setNombre($nombre) {
  5.         $this->nombre = $nombre;
  6.     }
  7.     public function getNombre() {
  8.         return $this->nombre;
  9.     }
  10. }
fijate que trabajo sobre el mismo atributo en dos métodos distintos de manera distinta, en uno lo asigno y en otro lo obtengo y esto es solo lo sencillo que puedes hacer con los atributos de tu clase, en base a ellos puedes hacer diversas funciones dependiendo a lo que necesites y a tu diseño de clase. claro que si es una variable mas que se utiliza dentro de un solo metodo como ya te indicaron no es necesario declarar un atributo
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #10 (permalink)  
Antiguo 13/01/2012, 07:08
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Cuando usar PRIVATE o PROTECTED

Queda perfectamente claro, les agradezco mucho por sacarme de las dudas y ahora organizare unas clases que según lo aprendido están mal desarrolladas.

Muchísimas gracias nuevamente.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???

Etiquetas: private, protected, usos
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

SíEste tema le ha gustado a 1 personas




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