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

declaración de variables en PHP OOP

Estas en el tema de declaración de variables en PHP OOP en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola amigos, Tengo una pregunta desde hace tiempo y no encuentro aún respuesta por lo cual acudo a ustedes. Gracias desde ya. Mi Duda: Cúal ...
  #1 (permalink)  
Antiguo 12/12/2012, 11:08
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 12 años, 10 meses
Puntos: 8
declaración de variables en PHP OOP

Hola amigos,

Tengo una pregunta desde hace tiempo y no encuentro aún respuesta por lo cual acudo a ustedes. Gracias desde ya.

Mi Duda:
Cúal es la diferencia entre declarar y crear las variables dentro de una clase al inicio e inicializarla en el constructor o hacerlo dentro de una función ?

Ejemplo:
Código PHP:
    class MiClase
    
{
        public  
$variable_1;
        private 
$variable_2;
        
        public function 
__construct()
        {
            
$this->variable_1 = array();
            
$this->variable_2 50;
        }
        
        public function 
setVariable_1(array $valor)
        {
            foreach(
$valor as $v)
            {
                
$this->variable_1[] = $v;
            }
        }
        
        public function 
getVariable_2()
        {
            return 
$this->variable_2;
        }
    } 
En que se diferencia de tenerlo de esta forma:
Código PHP:
    class MiClase
    
{
        public function 
setVariable_1(array $valor)
        {
            
$variable_1 = array();
            
            foreach(
$valor as $v)
            {
                
$variable_1[] = $v;
            }
        }
        
        public function 
getVariable_2()
        {
            
$variable_2 50;
            return 
$variable_2;
        }
    } 
Estos por supuesto son ejemplos hipotéticos.

En el primer ejemplo tendría que declarar cada una de mis variables antes para depsués poder usarlas.

En el segundo ejemplo declararía las variables cuando la vaya a usar dentro de cada método aunque solo tendrá alcance dentro de la función.

Muchas Gracias nuevamente de antemano.
  #2 (permalink)  
Antiguo 12/12/2012, 11:37
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: declaración de variables en PHP OOP

Bueno sino me equivoco en una clase una variable sólo es válida en el ámbito en el que se crea (entre los { }) Si la creas después de iniciar una clase puedes llamar a la variable desde cualquier lugar de la clase con $this->variable. En cambio si la creas desde dentro de algún método creo que no la puedes llamar desde otro método.

Así que si tienes:
Código PHP:
Ver original
  1. class clase_de_prueba {
  2. var $variable1;
  3. metodo() {
  4. echo $this->variable1; //estoy llamando a la variable de la clase
  5. $variable2="hola"; //creo una variable nueva
  6. }
  7. metodo2() {
  8. echo $variable2; //creo que daría error porque no puede acceder a ella. ni con $this
  9. //podría crear una $variable2 que no tendría nada que ver con $variable2 del metodo anterior
  10. }
  11. }
  #3 (permalink)  
Antiguo 12/12/2012, 12:16
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 12 años, 10 meses
Puntos: 8
Respuesta: declaración de variables en PHP OOP

Exacto, eso lo tengo claro. Pero quería saber cual es la lógica del análisis para determinar cuando debo declararla dentro de un método o dentro de la clase.

Ejemplo: si la variable la utilizaré en todos los métodos de mi clase, la declararía dentro de la clase, al inicio.

Si la utilizaría dentro del método solamente, la declararía dentro del metodo.

Y si mi clase tiene 10 métodos y y en solo 2 utilizaría la variable.

Aquí está mi duda, la declararía al inicio dentro de la clase y tendría acceso desde todos los métodos pero en realidad solo la necesito en dos de ellos. O sería en este caso más eficiente declararla en cada método.

La lógica de este análisis es lo que quiero comprender para poder aplicarla en situaciones futuras que se me presenten.

Gracias Amigos.
  #4 (permalink)  
Antiguo 12/12/2012, 13:38
 
Fecha de Ingreso: enero-2012
Ubicación: Mexico Df
Mensajes: 95
Antigüedad: 12 años, 3 meses
Puntos: 6
Respuesta: declaración de variables en PHP OOP

a eso se le llame el alcanse de una variable :)
__________________
Mi proyecto web Desarrollo-Tech visitame http://www.desarrollo-tech.com
  #5 (permalink)  
Antiguo 12/12/2012, 14:27
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 12 años, 10 meses
Puntos: 8
Respuesta: declaración de variables en PHP OOP

Hola,

Si, yo conozco y entiendo el alcance o scope de las variables.

Pero mi pregunta o duda va más dirigida a la implementación de la lógica para analizar cuando debería utilizar una forma u otra.

Otro ejemplo:
Código PHP:
  class MiClase
    
{
        public  
$nombre;
        
        public function 
__construct()
        {
            
$this->nombre 'Pedro';
        }
        
        public function 
getNombre()
        {
            return 
$this->nombre;
        }
    } 
O de esta forma:
Código PHP:
  class MiClase
    
{           
        public function 
getNombre()
        {
            
$nombre 'Pedro';
            return 
$nombre;
        }
    } 
o sea, cual es la lógica a seguir para usar el primer ejemplo el segundo.
Gracias
  #6 (permalink)  
Antiguo 12/12/2012, 14:40
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: declaración de variables en PHP OOP

Mira POO es para reutilizar codigo, para eso se crean variables y metodos que pueden servir para muchas cosas, que debes de tener en cuenta?? la cantidad de veces que vas a reutilizar una variable

ejemplo la conexion a la base de datos

Código PHP:
Ver original
  1. class db{
  2.     private $host = 'localhost';
  3.     private $port = 3306;
  4.     private $database = 'Database';
  5.     private $username = 'Username';
  6.     private $password = 'Password';
  7.     private $db = null;
  8.    
  9.     public function __construct(){
  10.         $dsn = "mysql:host={$this->host};port={$this->port};dbname={$this->database}";
  11.         $this->db = new PDO($dsn, $this->username, $this->password);
  12.     }
  13.     public function crear($data){
  14.        
  15.     }
  16.     public function update($data){
  17.        
  18.     }
  19. }

en este ejemplo usamos una conexion a la base de datos y por medio del __construct creamos la conexion cada vez que se invoca la clase, como ves es mucho mas simple definir la conexion una sola vez y de alli aplicarlas directamente a cada una de las funciones siguientes, haciendo el codigo mas limpio y claro de entender

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #7 (permalink)  
Antiguo 12/12/2012, 15:17
 
Fecha de Ingreso: octubre-2007
Mensajes: 118
Antigüedad: 16 años, 5 meses
Puntos: 11
Respuesta: declaración de variables en PHP OOP

Cita:
Iniciado por goransh_pc Ver Mensaje
Hola,

Si, yo conozco y entiendo el alcance o scope de las variables.

Pero mi pregunta o duda va más dirigida a la implementación de la lógica para analizar cuando debería utilizar una forma u otra.

Otro ejemplo:
Código PHP:
  class MiClase
    
{
        public  
$nombre;
        
        public function 
__construct()
        {
            
$this->nombre 'Pedro';
        }
        
        public function 
getNombre()
        {
            return 
$this->nombre;
        }
    } 
O de esta forma:
Código PHP:
  class MiClase
    
{           
        public function 
getNombre()
        {
            
$nombre 'Pedro';
            return 
$nombre;
        }
    } 
o sea, cual es la lógica a seguir para usar el primer ejemplo el segundo.
Gracias
Si creo entenderte, la cuestión de donde declaras las variables...
Cuando tu creas una clase (mesa, silla), va a tener unos atributos (patas, color, ...).
Entonces si tu quieres crear una clase Mesa por ejemplo, lo logico es declarar como atributos patas, color ... ¿por qué?

Si tu declaras la variable dentro de una función esa variable sólo será visible dentro de esa función en particular, pero no será un atributo de esa clase.

Conclusión que me explico fatal: Cuando declaras variables dentro de métodos es porque tendrán ámbito en ese método, pero lo lógico es que si creas una clase para construir objetos , todo objeto tiene atributos, y esos son los que has de declarar en la clase y no en métodos, porque de lo que se trata es que crees clases, para usar sus objetos (y estos objetos tendrán atributos).

Espero se me haya entendido jeje.
Un saludo
  #8 (permalink)  
Antiguo 12/12/2012, 15:42
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 12 años, 10 meses
Puntos: 8
Respuesta: declaración de variables en PHP OOP

Cita:
Iniciado por jonni09lo Ver Mensaje

Código PHP:
Ver original
  1. class db{
  2.     private $host = 'localhost';
  3.     private $port = 3306;
  4.     private $database = 'Database';
  5.     private $username = 'Username';
  6.     private $password = 'Password';
  7.     private $db = null;
  8.    
  9.     public function __construct(){
  10.         $dsn = "mysql:host={$this->host};port={$this->port};dbname={$this->database}";
  11.         $this->db = new PDO($dsn, $this->username, $this->password);
  12.     }
  13.     public function crear($data){
  14.        
  15.     }
  16.     public function update($data){
  17.        
  18.     }
  19. }
Hola jonni09lo,

Gracias por tu ayuda, pero en cuanto a tu ejemplo cual es la difrencia en que yo cree como lo has puesto o esta

Código PHP:
Ver original
  1. class db{
  2.     private $db = null;
  3.    
  4.     public function __construct(){
  5.           $host = 'localhost';
  6.           $port = 3306;
  7.           $database = 'Database';
  8.           $username = 'Username';
  9.           $password = 'Password';  
  10.              
  11.           $dsn = "mysql:host={$host};port={$port};dbname={$database}";
  12.           $this->db = new PDO($dsn, $username, $password);
  13.     }
  14.  
  15.     public function crear($data){
  16.        
  17.     }
  18.  
  19.     public function update($data){
  20.        
  21.     }
  22. }


Esta es la gran duda que tengo, si solo voy a usar estas variables dentro de mi constructor, cual es la diferencia de crearla en la clase o de crearla dentro del método.

Gracias por tu ayuda

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

A shilen79:

Gracias shilen79, también comprendo atributos y propiedades de los objetos.

Pero suponiendo que crearé una clase de una tarjeta de teléfono.

Código PHP:
class TarjetaTelefono
{

      public function 
getNumeroDeTarjetaByID($id)
      {
             
$tarjeta "SELECT numero FROM tabla WHERE tarjeta_id = '$id'";
             return 
$tarjeta;
      }

      public function 
getNumerosMarcadosByID($id)
      {
             
$numeros_marcados "SELECT numeros_marcados FROM tabla WHERE tarjeta_id = '$id'";
             return 
$numeros_marcados;
      }

O
Código PHP:
class TarjetaTelefono
{
      public 
$tarjeta;
      public 
$numeros_marcados;

      public function 
getNumeroDeTarjetaByID($id)
      {
             
$this->tarjeta "SELECT numero FROM tabla WHERE tarjeta_id = '$id'";
             return 
$this->tarjeta;
      }

      public function 
getNumerosMarcadosByID($id)
      {
             
$this->numeros_marcados "SELECT numeros_marcados FROM tabla WHERE tarjeta_id = '$id'";
             return 
$this->numeros_marcados;
      }


Cual de las dos usar y porque es lo que quiero tratar de entender.

Gracias a ambos por su ayuda.

Última edición por goransh_pc; 12/12/2012 a las 15:47
  #9 (permalink)  
Antiguo 12/12/2012, 15:49
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: declaración de variables en PHP OOP

La diferencia de mi ejemplo con el que pusiste radica en una sola cosa

la variables que inicialices dentro del constructor no podran accederse desde otra funcion dentro de la misma clase.

Como te dije ya antes la clave es la reutilizacion, cuando sepas que una variable la vas a usar en toda tu clase o fuera de esta (como son las variables publicas o estaticas que pueden llamarse fuera de la clase echo $db->mivariablepublica o echo db::mivariableestatica) declaralas como propiedades de la clase, del resto usalas como variables comunes que solo usaras en una funcion dada

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #10 (permalink)  
Antiguo 12/12/2012, 16:00
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: declaración de variables en PHP OOP

Pensando en tu segundo ejemplo, y analizando lo que te he dicho creo que deberias pensar en lo siguiente

Las propiedades de la clase, son usadas mas que todo cuando necesitas reutilizar el resultado de una funcion dentro de otra funcion dentro de la misma clase, me explico:

Código PHP:
Ver original
  1. class TarjetaTelefono
  2. {
  3. public $tarjeta;
  4. public $numeros_marcados;
  5.  
  6. public function getNumeroDeTarjetaByID($id)
  7. {
  8. $this->tarjeta = "SELECT numero FROM tabla WHERE tarjeta_id = '$id'";
  9. return $this->tarjeta;
  10. }
  11.  
  12. public function getNumerosMarcadosByID($id)
  13. {
  14. $this->numeros_marcados = "SELECT numeros_marcados FROM tabla WHERE tarjeta_id = '$id'";
  15. return $this->numeros_marcados;
  16. }
  17. }

En este caso las dos propiedades publicas no son necesarias, la razon?? porque los dos metodos pueden actuar independientemente el uno del otro, entonces no es necesario colocar metodos

PERO si getNumerosMarcadosByID dependiera de un resultado que proviene de otra funcion (getNumeroDeTarjetaByID) en este caso si seria necesario

Código PHP:
Ver original
  1. class TarjetaTelefono
  2. {
  3.       public num_tarjeta = null;
  4.       public function getNumeroDeTarjetaByID($id)
  5.       {
  6.              $this->num_tarjeta  = "SELECT numero FROM tabla WHERE tarjeta_id = '$id'";
  7.              return $this->num_tarjeta;
  8.       }
  9.  
  10.       public function getNumerosMarcadosByID()
  11.       {
  12.              $numeros_marcados = "SELECT numeros_marcados FROM tabla WHERE numero = '{$this->num_tarjeta}'";
  13.              return $numeros_marcados;
  14.       }
  15. }

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #11 (permalink)  
Antiguo 12/12/2012, 17:01
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: declaración de variables en PHP OOP

Cita:
Iniciado por shilen79 Ver Mensaje
Si creo entenderte, la cuestión de donde declaras las variables...
Cuando tu creas una clase (mesa, silla), va a tener unos atributos (patas, color, ...).
Entonces si tu quieres crear una clase Mesa por ejemplo, lo logico es declarar como atributos patas, color ... ¿por qué?

Si tu declaras la variable dentro de una función esa variable sólo será visible dentro de esa función en particular, pero no será un atributo de esa clase.

Conclusión que me explico fatal: Cuando declaras variables dentro de métodos es porque tendrán ámbito en ese método, pero lo lógico es que si creas una clase para construir objetos , todo objeto tiene atributos, y esos son los que has de declarar en la clase y no en métodos, porque de lo que se trata es que crees clases, para usar sus objetos (y estos objetos tendrán atributos).

Espero se me haya entendido jeje.
Un saludo
creo que acá esta la explicación mas pertinente (no se si un poco enredada ), un atributo de una clase es algo que identifica a o pertenece a un objeto, una varible dentro de un método es simplemente una variable, en que se diferencian?? ambito ya que no es la misma responsabilidad la que tienen, una puede identificar, una asignación a un atributo de un objeto puede ser trabajado durante el ciclo del objeto tranquilamente, un variable dentro de un método simplemente esta disponible en la ejecución de ese método, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #12 (permalink)  
Antiguo 12/12/2012, 22:07
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 12 años, 10 meses
Puntos: 8
Respuesta: declaración de variables en PHP OOP

Cita:
Iniciado por jonni09lo Ver Mensaje
En este caso las dos propiedades publicas no son necesarias, la razon?? porque los dos metodos pueden actuar independientemente el uno del otro, entonces no es necesario colocar metodos

PERO si getNumerosMarcadosByID dependiera de un resultado que proviene de otra funcion (getNumeroDeTarjetaByID) en este caso si seria necesario

Código PHP:
Ver original
  1. class TarjetaTelefono
  2. {
  3.       public num_tarjeta = null;
  4.       public function getNumeroDeTarjetaByID($id)
  5.       {
  6.              $this->num_tarjeta  = "SELECT numero FROM tabla WHERE tarjeta_id = '$id'";
  7.              return $this->num_tarjeta;
  8.       }
  9.  
  10.       public function getNumerosMarcadosByID()
  11.       {
  12.              $numeros_marcados = "SELECT numeros_marcados FROM tabla WHERE numero = '{$this->num_tarjeta}'";
  13.              return $numeros_marcados;
  14.       }
  15. }

Saludos
Hola jonni09lo,

Primero que todo muchas gracias por tu ayuda y el debate.

En cuanto a tu segundo ejemplo también pudieras decir de esta forma.

Código PHP:
class TarjetaTelefono 

      public function 
getNumeroDeTarjetaByID($id
      { 
             
$num_tarjeta  "SELECT numero FROM tabla WHERE tarjeta_id = '$id'"
             return 
$num_tarjeta
      } 

      public function 
getNumerosMarcadosByID($id
      { 
             
$numeros_marcados "SELECT numeros_marcados FROM tabla WHERE numero = ' " $this->getNumeroDeTarjetaByID($id) .  "; 
             
             return $numeros_marcados; 
      } 

Con esto me refiero, que sin tener la variable declarada al inicio de la clase también puedo usar lo que me retorna el método y utilizar su resultado dentro del método que lo necesite al igual que llamar la variable.

Pero busco saber cuando usar una forma o otra, en que se diferencia.

Gracias una vez más
  #13 (permalink)  
Antiguo 13/12/2012, 05:11
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: declaración de variables en PHP OOP

No entiendo muy bien que no esta claro pero entiendes la diferencia entre propiedad y variable local ?, porque los ejemplos de tu primer post no son equiparables, fuera de esto lo normal es inicializar en el constructor las propiedades estrictamente necesarias para el funcionamiento de la clase.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #14 (permalink)  
Antiguo 13/12/2012, 09:20
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 12 años, 10 meses
Puntos: 8
Respuesta: declaración de variables en PHP OOP

Hola masterpuppet,

Me das una idea de lo que voy buscando.

Según tu comentario, a ver si entendí tu idea.

Cuando cree una variable para ser usada como propiedad de un objeto, la crearía dentro de la clase y le asigno un valor en el constructor.

Cuando cree un método de la clase, y usaré el valor de alguna variable dentro de él, crearía la variable dentro del método y solo tendrá un alcance dentro de ese método.

Si creo otro método y necesito usar el valor de la variable que está dentro del método creado anteriormente, no podría porque tiene solo alcance local esa variable, entonces usaría el valor retornado por el método anterior y lo asigno a la variable del nuevo método.

Hasta aquí lo que he comprendido de este debate.

Al final solo declararía las variables dentro de la clase y las asignos en el constructor cuando sean propiedades de la clase.

Código PHP:
    class Carro
    
{
        public 
$carroTipo;
        
        public function 
__construct()
        {
            
$this->carroTipo 'Camion';
        }
        
        public function 
setCarroTipo($tipo)
        {
            
$this->carroTipo $tipo;
        }
        
        public function 
getCarroTipo()
        {
            return 
$this->carroTipo;
        }
        
        public function 
getCantidadRuedas()
        {
            
$cantidadRuedas "SELECT cantidad_ruedas FROM tabla WHERE carro_tipo = '$this->carroTipo'";
            
            return 
$cantidadRuedas;
        }
        
        public function 
getCOnductoresNecesarios()
        {
            if (
$this->getCantidadRuedas 4)
            {
                return 
2;
            }    
            
            return 
1
        }
    } 
EN este caso no necesitaría, por lo que me han explicado todos en este debate, crear una variable $cantidadRuedas al inicio de la clase, porque será utilizada solo en el método obtener la cantidad de ruedas.

Depsués para saber la cantidad de choferes necesarios según la cantidad de ruedas, necesito saber primero cuantas ruedas tiene el carro. Pero como tengo un método que me dice cuantas ruedas tiene el carro según la propiedad del tipo de carro creado, no tengo que crear otra variable de clase con la cantidad de ruedas que tiene el carro, utilizaría lo que me retorna el método getCantidadRuedas.

Voy bien ???

Gracias a todos

Última edición por goransh_pc; 13/12/2012 a las 09:40
  #15 (permalink)  
Antiguo 13/12/2012, 15:40
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 4 meses
Puntos: 65
Respuesta: declaración de variables en PHP OOP

Vos entendés qué es y cuál es el alcance, te queda claro cuál es la direferencia entre una forma y otra según ejemplos que propenes, en algunos casos no sirve crear una propiedad, en otro puede dar lo mismo y en otros no, eso depende el caso.

Te propongo crear una persona, solamente con nombre y edad

Vamos a hacerlo sin atributos y obtenemos los datos desde los métodos

Código PHP:
Ver original
  1. <?php
  2.  
  3. class Persona
  4. {    
  5.     public function getNombre()
  6.     {
  7.         return "Pepito";
  8.     }
  9.    
  10.     public function getNacimiento(){
  11.         return "01-01-1994";
  12.     }
  13. }
  14.  
  15. $p = new Persona();
  16. echo $p->getNombre();
  17. echo $p->getNacimiento();

¿Si querés crear más persona?
Tendrías que crear tantas clases para la cantidad de personas que quieras.

Ahora con atributos pero asignándole valores en el constructor.
Código PHP:
Ver original
  1. <?php
  2.  
  3. class Persona
  4. {    
  5.     private $nombre;
  6.     private $nacimiento;
  7.  
  8.  
  9.     function __construct() {
  10.         $this->nombre = "Pepito";
  11.         $this->nacimiento = $nacimiento = "01-01-1994";
  12.     }
  13.  
  14.    
  15.     public function getNombre()
  16.     {
  17.         return $this->nombre;
  18.     }
  19.    
  20.     public function getNacimiento(){
  21.         return $this->nacimiento;
  22.     }
  23. }
  24.  
  25. $p = new Persona();
  26. echo $p->getNombre();
  27. echo $p->getNacimiento();
  28.  
  29. $p = new Persona();
  30. echo $p->getNombre();
  31. echo $p->getNacimiento();

Tiene atributos pero en definitiva es lo mismo que la primera versión. El resultado es el mismo.

Ahora con atributos pero pasandole valores por parámetros en el constructor y asignándole a los atributos.
Código PHP:
Ver original
  1. <?php
  2.  
  3. class Persona
  4. {    
  5.     private $nombre;
  6.     private $nacimiento;
  7.  
  8.  
  9.     function __construct($nombre, $nacimiento) {
  10.         $this->nombre = $nombre;
  11.         $this->nacimiento = $nacimiento;
  12.     }
  13.  
  14.     public function getNombre()
  15.     {
  16.         return $this->nombre;
  17.     }
  18.    
  19.     public function getNacimiento(){
  20.         return $this->nacimiento;
  21.     }
  22. }
  23.  
  24. $p = new Persona("Pepito", "01-01-1994");
  25. echo $p->getNombre();
  26. echo $p->getNacimiento();
  27.  
  28. $p = new Persona("Juancito", "01-01-1994");
  29. echo $p->getNombre();
  30. echo $p->getNacimiento();

Ahora podemos crear tantas personas que queremos con una sola clase. En este caso los atributos sirven de algo.

Ahora vamos a agregar un método para saber si es mayor de edad.
Código PHP:
Ver original
  1. <?php
  2.  
  3. class Persona
  4. {    
  5.     private $nombre;
  6.     private $nacimiento;
  7.  
  8.  
  9.     function __construct($nombre, $nacimiento) {
  10.         $this->nombre = $nombre;
  11.         $this->nacimiento = $nacimiento;
  12.     }
  13.  
  14.     public function getNombre()
  15.     {
  16.         return $this->nombre;
  17.     }
  18.    
  19.     public function getNacimiento(){
  20.         return $this->nacimiento;
  21.     }
  22.    
  23.     public function esMayor(){
  24.         /*
  25.          * Supongamos que hago un calculo con la fecha de nacimiento para saber la edad
  26.          * Pero para evitar el cálculo coloquemos 18 :P
  27.          */
  28.         $edad = 18;
  29.        
  30.         if ($edad >= 18)
  31.             return true;
  32.        
  33.         return false;
  34.     }
  35.  
  36.    
  37. }
  38.  
  39. $p = new Persona("Pepito", "01-01-1994");
  40. echo $p->getNombre();
  41. echo $p->getNacimiento();
  42. if ($p->esMayor())
  43.    echo "Es mayor";

En ésta última existe una variable $edad en el método esMayor(). ¿Porqué no lo hago con una propiedad que sea edad? porque por ahora sólo quiero obtener la edad para saber si es mayor, entonces hago el cálculo y le asigno a la variable $edad. Para hacer el cálculo de edad con el nacimiento puedo usar la propiedad $nacimiento o el método getNacimiento(), me va a dar el mismo valor.

Ahora si quiero saber la edad. Creamos un método para obtener la edad.
Código PHP:
Ver original
  1. <?php
  2.  
  3. class Persona
  4. {    
  5.     private $nombre;
  6.     private $nacimiento;
  7.  
  8.  
  9.     function __construct($nombre, $nacimiento) {
  10.         $this->nombre = $nombre;
  11.         $this->nacimiento = $nacimiento;
  12.     }
  13.  
  14.    
  15.     public function getNombre()
  16.     {
  17.         return $this->nombre;
  18.     }
  19.    
  20.     public function getNacimiento(){
  21.         return $this->nacimiento;
  22.     }
  23.    
  24.     public function esMayor(){        
  25.         return $this->getEdad() >= 18;
  26.     }
  27.    
  28.     public function getEdad()
  29.     {
  30.         //devuelvo 18 nomas :P
  31.         return 18;
  32.     }
  33. }
  34.  
  35. $p = new Persona("Pepito", "01-01-1994");
  36. echo $p->getNombre();
  37. echo $p->getNacimiento();
  38. if ($p->esMayor())
  39.    echo "Es mayor";
¿Porqué no creo un atributo edad? Porque no necesito manipular la edad, lo obtengo con la fecha de nacimiento. ¿Puedo colocar un atributo? si, de poder se puede pero no creo que sirva de algo.
Ojo, no digo que da lo mismo obtener un dato desde una propiedad o de un método, siempre según el caso. En este caso si, porque no modifico la fecha de nacimiento luego de haber creado el objeto, pero, fijate que puede pasar si lo manipulo teniendo un get y un set para la fecha de nacimiento, o una propiedad publica:

Código PHP:
Ver original
  1. $p = new Persona("Pepito", "01-01-1994");
  2. echo $p->getEdad(); //Me da 18
  3. echo $p->edad; //Me da 18
  4. //Modifico ahora el nacimiento
  5. echo $p->nacimiento = "13-12-2012";
  6. echo $p->edad; // Me va a devolver 18 pero es erroneo porque modifiqué la fecha de nacimeinto
  7. echo $p->getEdad(); //Me va a devolver 0 porque el método devuelve la edad calculando con la fecha de nacimiento

O sea, todo depende jeje
Las propiedades sirven y funcionan de una forma, las variables local funcionan de una forma, como las utilices depende del programador


Me podés decir que para qué creo un método getNombre, getNacimiento, getEdad si se puede asignar el mismo valor a una propiedad estableciendolas como públicas, porque yo quiero que una vez creado el objeto solo se pueda acceder al valor y no modificarlo fuera de la clase
  #16 (permalink)  
Antiguo 14/12/2012, 19:49
 
Fecha de Ingreso: junio-2011
Mensajes: 80
Antigüedad: 12 años, 10 meses
Puntos: 8
Respuesta: declaración de variables en PHP OOP

Gracias Dany_s,

Por tu ejemplos y el tiempo que te tomaste en ayudarme a esclarecer mis dudas.

Entonces más bien depende de las necesidades del objeto que crearée en el futuro.

Como bien dices de funcionar, funciona, de una forma o otra, pero en muchos casos cuando uso el patrón MVC en mis proyectos, instancio la clase una sola vez, y no modifico sus valores internos (propiedades) de la clase, por eso no me quedaba claro si debía declarar mis variables en el inicio de la clase o dentro de los métodos de la clase que será instnciada solamente una sola vez y no modificare sus valores.

Mas bien realizar consultas, retornar arrays de esas consultas pero todo desde un mismo objeto. No pretendía crear una clase para después crear de ella multiples objetos diferentes.

Ya me queda más clara la idea.

Gracias nuevamente por tu ayuda.

Etiquetas: oop, php, variables
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 02:56.