Foros del Web » Programando para Internet » PHP »

Problema al obtener valor de una clase

Estas en el tema de Problema al obtener valor de una clase en el foro de PHP en Foros del Web. Hola compañeros, Tengo un pequeño problema al obtener el valor de una variable que se guarda mediante clases: En mi web tengo una imagen en ...
  #1 (permalink)  
Antiguo 06/03/2015, 20:35
 
Fecha de Ingreso: febrero-2015
Ubicación: Mexico
Mensajes: 46
Antigüedad: 9 años, 8 meses
Puntos: 3
Problema al obtener valor de una clase

Hola compañeros,

Tengo un pequeño problema al obtener el valor de una variable que se guarda mediante clases:

En mi web tengo una imagen en un div que al dar click en diferentes lugares manda dos variables por url href="index.php?num=1&edo=agu" al hacer eso solo recarga la pagina y manda las variables y la manera en que la recogo es asi:

primero mi index.php solo incluyo el php que recoge la vari
Código PHP:
<?php include("redireccionar.php");

aqui recogo las variables num valida su valor y si es 1 en un div de mi index carga estados.php y tambien manda la 2da variable a clase.php

redireccionar.php
Código PHP:
<?php
    
    $num
=$_GET["red"];
    
$valor=$_GET["edo"];
    require(
"clase.php");
    
    
$obj=new valor();    
    
$obj->setEdo($valor);    
    if(
$num=="1"){
        
?>
            <script>
            $(document).ready(function() {
                    $("#paginas").load('estados.php #estados');
                });
            </script>
        <?php
    
}
?>
en clase.php

Código PHP:
<?php
    
class valor{
        private 
$edo;
        
        public function 
setEdo($edo){
            
$this->estado=$edo;
        }
        public function 
getEdo(){
            return 
$this->estado;
    }
}
?>
y en estados.php
El problema reside aqui al querer hacer get al valor edo ya que necesito volver a evaluarlo para definir que mostrar me sale esta Noticia:

Notice: Undefined property: valor::$estado in C:\xampp\htdocs\shared\php\clase.php on line 9


Código PHP:
<div id="estados">
<?php    
    
include("clase.php");
    
$obj=new valor();
    echo 
$obj->getEdo();

?>
</div>

me podrian ayudar por favor
  #2 (permalink)  
Antiguo 06/03/2015, 21:24
 
Fecha de Ingreso: marzo-2015
Mensajes: 15
Antigüedad: 9 años, 8 meses
Puntos: 3
Respuesta: Problema al obtener valor de una clase

a ver, en primer lugar, mandas por href una variable "num" y otra "edo", pero en tu php tenes un $_GET["red"];

despues haces dos instancias de la clase valor, recorda que por cada instancia nueva que hagas de una clase se genera un nuevo espacio de memoria de las propiedades para el nuevo objeto creado.

en "redireccionar.php" haces una instacia de clase "valor" en tu variable $obj, y luego guardas la variable edo con el metodo $obj->setEdo().

en "estados.php" haces otra instancia de la clase "valor" a una variable $obj. El problema recae que al hacer esta nueva instancia la propiedad "private $edo" se crea en un nuevo espacio de memoria para ese nuevo objeto sin ningun valor.

el setEdo() que hiciste en el archivo "redireccionar.php" guarda el valor en el objeto de aquel archivo, no en el objeto que instanciaste en "estados.php"

mostra cuando y donde haces los includes de los archivos php.


ME acabo de dar cuenta que tambien la clase valor esta mal hecha:
tiene como nombre de propieda "$edo", pero luego haces "$this->estado". deberias corregirla de esta manera.

Código PHP:
Ver original
  1. class valor{
  2.         private $estado; //antes tenias $edo
  3.        
  4.         public function setEdo($edo){
  5.             $this->estado=$edo;
  6.         }
  7.         public function getEdo(){
  8.             return $this->estado;
  9.     }
  10. }

La solucion es NO hacer otro $obj = new valor(); en "estados.php"; asegurate de que en "redireccionar.php" este oncluido "estados.php" o viceversa. Pero si la cosa se complica muchoo hay otra solucion POCO RECOMENDABLE, puede que paresca milagrosa pero no es el modo correcto, es guardar como "static" tu propiedad "$estado". Esto permitira que todas las instancias de la clase compartan la misma propiedad:

Código PHP:
Ver original
  1. class valor{
  2.     static $estado;
  3.    
  4.     public function setEdo($edo){
  5.         self::$estado = $edo;
  6.     }
  7.     public function getEdo(){
  8.         return self::$estado;
  9.     }
  10. }

Última edición por darioPHP; 06/03/2015 a las 21:42

Etiquetas: clase, valor, variable
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 14:10.