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

Problemas al utilizar los métodos d una clase

Estas en el tema de Problemas al utilizar los métodos d una clase en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Tengo un fichero llamado carrito.php, cuyo código es el siguiente: Código PHP: <?    class  carrito  {      //atributos de la clase      var  $num_productos ;     var  $array_id_prod ...
  #1 (permalink)  
Antiguo 01/03/2005, 08:55
 
Fecha de Ingreso: febrero-2005
Mensajes: 26
Antigüedad: 19 años, 11 meses
Puntos: 0
Problemas al utilizar los métodos d una clase

Tengo un fichero llamado carrito.php, cuyo código es el siguiente:
Código PHP:
<?
  
class carrito {
    
//atributos de la clase
    
var $num_productos;
    var 
$array_id_prod;
    var 
$array_nombre_prod;
    var 
$array_precio_prod;

    
//constructor. Realiza las tareas de inicializar los objetos cuando se instancian
    //inicializa el numero de productos a 0
    
function carrito () {
       
$this->num_productos=0;
    }

    
//Introduce un producto en el carrito. Recibe los datos del producto
    //Se encarga de introducir los datos en los arrays del objeto carrito
    //luego aumenta en 1 el numero de productos
    
function introduce_producto($id_prod,$nombre_prod,$precio_prod){
       
$this->array_id_prod[$this->num_productos]=$id_prod;
       
$this->array_nombre_prod[$this->num_productos]=$nombre_prod;
       
$this->array_precio_prod[$this->num_productos]=$precio_prod;
       
$this->num_productos++;
    }

    
//Muestra el contenido del carrito de la compra
    //ademas pone los enlaces para eliminar un producto del carrito
    
function imprime_carrito(){
       
$suma 0;
       echo 
'<table border=1 cellpadding="3">
       <tr>
       <td><b>Nombre producto</b></td>
       <td><b>Precio</b></td>
       <td> </td>
       </tr>'
;
       for (
$i=0;$i<$this->num_productos;$i++){
          if(
$this->array_id_prod[$i]!=0){
             echo 
'<tr>';
             echo 
"<td>" $this->array_nombre_prod[$i] . "</td>";
             echo 
"<td>" $this->array_precio_prod[$i] . "</td>";
             echo 
"<td><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>";
             echo 
'</tr>';
             
$suma += $this->array_precio_prod[$i];
          }
       }
       
//muestro el total
       
echo "<tr><td><b>TOTAL:</b></td><td> <b>$suma</b></td><td> </td></tr>";
       
//total más IVA
       
echo "<tr><td><b>IVA (16%):</b></td><td> <b>" $suma 1.16 "</b></td><td> </td></tr>";
       echo 
"</table>";
    }

    
//elimina un producto del carrito. recibe la linea del carrito que debe eliminar
    //no lo elimina realmente, simplemente pone a cero el id, para saber que esta en estado retirado
    
function elimina_producto($linea){
       
$this->array_id_prod[$linea]=0;
    }
}
?>
En una página tengo un formulario con la lista de productos para q el usuario seleccione una cantidad. Al principio d esa página pongo:
Código PHP:
<?
  
include("carrito.php");
  
session_start();
  if (!isset(
$_SESSION["ocarrito"])){
    
$_SESSION["ocarrito"] = new carrito();
}
 
?>
Cuando hago el submit, paso a una página con el código:
Código PHP:
<?
include "carrito.php";
session_start();
if (!isset(
$_SESSION["ocarrito"])){
    
$_SESSION["ocarrito"] = new carrito();
}

...
$_SESSION["ocarrito"]->introduce_producto($codigo$articulo$precio); //LINEA 83
...
?>
Cuando llego a esta última página me sale el siguiente error:
Fatal error: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition carrito of the object you are trying to operate on was loaded _before_ the session was started in /x/compra.php on line 83

Pq me sale este error??Q es lo q tengo mal???
  #2 (permalink)  
Antiguo 01/03/2005, 17:36
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 21 años, 3 meses
Puntos: 1
saludos.
intenta hacer un echo en el constructor del objeto, eso te ayudará a saber si por lo menos está inicializando el objeto. Ahora, antes de eso, escribe:

Código PHP:
var_dump($_SESSION['ocarrito']); 
muchas pistas podrás deducir... cuentanos como te fué
  #3 (permalink)  
Antiguo 06/03/2005, 21:56
 
Fecha de Ingreso: noviembre-2004
Mensajes: 8
Antigüedad: 20 años, 2 meses
Puntos: 0
Proba deshabilitando session.auto_start en el php.ini o haciendo un session_write_close() antes del session_start().

Acordate de que PHP es un motor de scripting, es decir basado en scripts y no en objetos (donde lo que importa es la clase y no la instancia), va a pasar un tiempo para que las definiciones de clases puedan ser compiladas dinamicamente, ni que hablar para mutaciones de instancias o metaprogramacion en serio :(
Saludos

eidan
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:07.