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

Acceder al valor de una variable en una clase

Estas en el tema de Acceder al valor de una variable en una clase en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola señores Estoy guardando las cosas repetitivas e importantes en clases, pero estoy reciente con PHP y tengo problemas en ese sentido. El caso es ...
  #1 (permalink)  
Antiguo 29/09/2009, 15:56
Avatar de junihh  
Fecha de Ingreso: febrero-2004
Ubicación: República Dominicana
Mensajes: 997
Antigüedad: 20 años, 2 meses
Puntos: 7
Acceder al valor de una variable en una clase

Hola señores

Estoy guardando las cosas repetitivas e importantes en clases, pero estoy reciente con PHP y tengo problemas en ese sentido.

El caso es la pregunta del titulo, quiero acceder al valor de una variable dentro de una clase y esta me devuelve el error:

Fatal error: Cannot access empty property in .......\pruebasphp\clase\index.php on line 5

Para esta prueba tengo a "index.php" con el siguiente codigo:

Código PHP:
<?php

include("clase.php"); $objCL = new Clase(); $objCL->ranNum();
echo 
$objCL->$elvar;

?>
(La linea 5 del error es el echo)

Y para "clase.php" lo siguiente:

Código PHP:
<?php

class Clase
{
    public 
$elvar;
    
    public function 
ranNum ()
    {
        
$elvar rand(0,500);
    }
}

?>
No tengo claro que puedo hacer para conocer el valor de $elvar. Que estoy haciendo mal ???
__________________
JuniHH
- Mi blog
- Mi portafolio
  #2 (permalink)  
Antiguo 29/09/2009, 16:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Acceder al valor de una variable en una clase

Sería $objCL->elvar cuando lees las propiedades del objeto ya no usas $ en la propiedad.

Por otro lado las variables públicas no son recomendadas para nada en una clase ya que rompen con el encapsulamiento de una clase.

Saludos.

Tema trasladado desde PHP General.
  #3 (permalink)  
Antiguo 29/09/2009, 17:03
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Respuesta: Acceder al valor de una variable en una clase

Además, dentro de tu método estás manejando una variable local. Para acceder a la propiedad del objeto tienes que hacerle referencia con $this.

Lo siguiente sería lo correcto:
Código PHP:
Ver original
  1. <?php
  2.  
  3. class Clase
  4. {
  5.     public $elvar;
  6.    
  7.     public function ranNum ()
  8.     {
  9.         // Haciendo referencia con $this
  10.         $this->elvar = rand(0,500);
  11.     }
  12. }
  13.  
  14. // Uso
  15. $objCL = new Clase();
  16. $objCL->ranNum();
  17. echo $objCL->elvar;

Y sí; variables públicas no son recomendadas. Un saludo
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #4 (permalink)  
Antiguo 29/09/2009, 20:35
Avatar de junihh  
Fecha de Ingreso: febrero-2004
Ubicación: República Dominicana
Mensajes: 997
Antigüedad: 20 años, 2 meses
Puntos: 7
Respuesta: Acceder al valor de una variable en una clase

Vaya, por lo visto es un poco mas laborioso que las clases para ActionScript, de hecho, el ejemplo que puse es en cierta forma como yo llamaria el valor de una variable dentro de una clase en AS.

Muchas gracias por sus respuestas y entendido el señalamiento sobre las variables publicas. Fueron de gran ayuda.
__________________
JuniHH
- Mi blog
- Mi portafolio

Última edición por junihh; 29/09/2009 a las 21:08
  #5 (permalink)  
Antiguo 30/09/2009, 07:11
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Acceder al valor de una variable en una clase

Lo "correcto" sería eliminar los atributos públicos y seguir el estándar de codificación Zend (además de sugerir que los ejemplos que hagas para practicar sean más concretos, ya que te ayudan a razonarlos):

Código PHP:
<?php

class Persona
{
    private 
$_nombre;

    public function 
__construct($nombre)
    {
        
$this->_nombre $nombre;
    }
    public function 
getSaludo()
    {
        return 
"Hola, mi nombre es ".$this->_nombre;
    }
    public function 
__toString()
    {
        return 
$this->_nombre;
    }
}

$unaPersona = new Persona('junihh');

echo 
$unaPersona->getSaludo();
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #6 (permalink)  
Antiguo 30/09/2009, 08:05
Avatar de junihh  
Fecha de Ingreso: febrero-2004
Ubicación: República Dominicana
Mensajes: 997
Antigüedad: 20 años, 2 meses
Puntos: 7
@enriqueplace, muy interesante lo que dices. Realmente me ayuda este ejemplo tuyo, muchisimas gracias.

@enriqueplace, una duda:

He visto en varios casos donde el contructor le denominan como tu lo hiciste ("public function __construct"). Debe llamarse de tal forma o puedo usar cualquier nombre personalizado ???
__________________
JuniHH
- Mi blog
- Mi portafolio

Última edición por GatorV; 30/09/2009 a las 08:48
  #7 (permalink)  
Antiguo 30/09/2009, 08:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Acceder al valor de una variable en una clase

En PHP4, el constructor tenía que ser igual al nombre de la clase, a partir de PHP5 y arriba el constructor debe de ser __construct, public private, o protected dependiendo del uso.

Saludos.
  #8 (permalink)  
Antiguo 30/09/2009, 11:49
Avatar de junihh  
Fecha de Ingreso: febrero-2004
Ubicación: República Dominicana
Mensajes: 997
Antigüedad: 20 años, 2 meses
Puntos: 7
Respuesta: Acceder al valor de una variable en una clase

@GatorV, entiendo, entonces lo hare de tal forma entonces cuando lo necesite. Muchas gracias por responder.
__________________
JuniHH
- Mi blog
- Mi portafolio
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:46.