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

Problema con sesionesy objeto

Estas en el tema de Problema con sesionesy objeto en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, mi problema es el sisguiente: Estoy haciendo un carrito de la copmpra y al actualizar el objeto que guardo en sesión, este no actúa: ...
  #1 (permalink)  
Antiguo 12/01/2012, 08:51
 
Fecha de Ingreso: enero-2012
Mensajes: 3
Antigüedad: 12 años, 3 meses
Puntos: 0
Problema con sesionesy objeto

Hola, mi problema es el sisguiente:

Estoy haciendo un carrito de la copmpra y al actualizar el objeto que guardo en sesión, este no actúa:


Los dos archivos con los que estoy tratando son ""carrito.php" y"index.php"

"carrito.php"
<?php
class Carrito {

var $num_productos=2;
var $array_id_prod;
var $array_nombre_prod;
var $array_precio_prod;

//Constructor de la clase
function __construct() {
$num_productos = 9;
}

//Constructor de la clase
function Carrito() {
$num_productos = 9;
//}

function a(){
$num_productos += 17;
return $num_productos;
}
/*
?>


index.php: (pongo lo importante)


include ("clases/carrito.php");
session_start();

if (!isset($_SESSION["carroCompra"])){
$_SESSION["carroCompra"] = new Carrito();
echo "Instanciado por primera vez";
}

echo $_SESSION["carroCompra"]->num_productos;
echo "<br/>"
echo $_SESSION["carroCompra"]->a();


La primera vez que entro, pasa por "instanciado por primera vez" y las siguientes no (eso es correcto).

ahora el problema/problemas:
-la primera vez que entro saca por pantalla:
Instanciado por primera vez
2
17
cuando creo que debería sacar 9 y 26.
creo que está omitiendo el constructor.
y el método a(), no añade 17 a lo que ya había (2 o 9) sino que se queda en 17 (como si el número que había fuese 0 o nulo)
-las siguientes veces siempres saca lo mismo:
2
17
los problemas son los mismos que en el caso anterior.


Me estoy volviendo un poco loco con esto.
  #2 (permalink)  
Antiguo 12/01/2012, 09:53
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: Problema con sesionesy objeto

Para accesar a una propiedad de tu clase es forzoso que uses $this:
Código PHP:
Ver original
  1. function a() {
  2.     // mal
  3.     $num_productos += 17;
  4.     // bien
  5.     $this->num_productos += 17;
  6. }

Lo mismo en el constructor, ahora sí usas PHP5, no debes de usar var, deberías de usar private/protected/public, y el constructor es __construct(), si usas PHP4, entonces sí debes de usar var, y el constructor Carrito().

Saludos.
  #3 (permalink)  
Antiguo 12/01/2012, 10:16
 
Fecha de Ingreso: enero-2012
Mensajes: 3
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Problema con sesionesy objeto

Gracias por la respuesta.

Uso PHP5.

Lo he modificado y queda así:

public $num_productos=2;
public $array_id_prod;
public $array_nombre_prod;
public $array_precio_prod;

//Constructor de la clase
function __construct() {
$this->$num_productos = 9;
}


function a(){
$this->$num_productos += 17;
return $this->$num_productos;
}



Ahora me da el fallo siguiente:

Fatal error: Cannot access empty property in C:\Servidor\WEB\Factory del Hogar PHP\clases\carrito.php on line 11


La línea 11 corresponde con:
$this->$num_productos = 9; (del constructor)


y si la coento, entonces falla la línea:
$this->$num_productos += 17;


Las dos que hacen uso del this
  #4 (permalink)  
Antiguo 12/01/2012, 10:22
 
Fecha de Ingreso: enero-2012
Mensajes: 3
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Problema con sesionesy objeto

Ok, el fallo era porque accedía como this->$num_procutos y se accede this->num_procutos


Ya se ha solucionado todo.

Muchas gracias por la ayuda

Etiquetas: objeto, sesión
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 01:16.