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

problemas con SESSION y unserialize (Call to a member function on a non-object in)

Estas en el tema de problemas con SESSION y unserialize (Call to a member function on a non-object in) en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola tengo un problemas con $_SESSION[$objectName], funciona bien la 1º vez que se carga la página en el navegador , pero despues al actualizar o ...
  #1 (permalink)  
Antiguo 12/05/2006, 00:21
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
problemas con SESSION y unserialize (Call to a member function on a non-object in)

Hola tengo un problemas con $_SESSION[$objectName], funciona bien la 1º vez que se carga la página en el navegador , pero despues al actualizar o cambiar de pagina da un error:

Código PHP:
Fatal errorCall to a member function on a non-object in C:xampphtdocszsamermoduloscatalogoincludesautoload_func.php on line 106 
me parece que debe ser problema de serialize o unserialize, pero no he podido resolverlo.

aqui esta el código
Código PHP:

     
case 'classInstantiate':
      
$objectName $entry['objectName'];
      
$className $entry['className'];
      if (isset(
$entry['classSession']) && $entry['classSession'] === true) {
        if (isset(
$entry['checkInstantiated']) && $entry['checkInstantiated'] === true) {
          if (!isset(
$_SESSION[$objectName])) {
            
$_SESSION[$objectName] = new $className();
            
$debugOutput .= 'if (!$_SESSION[' $objectName ']) { ';
            
$debugOutput .= '$_SESSION[' $objectName '] = new ' $className '();';
            
$debugOutput .= ' }<br />';
          }
        } else {
          
$_SESSION[$objectName] = new $className();
          
$debugOutput .= '  $_SESSION[' $objectName '] = new ' $className '();</br>';
        }
      } else {
        $
$objectName = new $className();
        
$debugOutput .= '$' $objectName ' = new ' $className '();</br>';
      }
      break;
      case 
'objectMethod':
      
$objectName $entry['objectName'];
      
$methodName $entry['methodName'];
      if (
is_object($_SESSION[$objectName])) {
            
        
$_SESSION[$objectName]->$methodName();
        
$debugOutput .= '$_SESSION[' $objectName ']->' .  $methodName '();</br>';
      } else {

        
$objectName=$_SESSION[$objectName];
        $
$objectName->$methodName();
        
$debugOutput .= '$' $objectName '->' $methodName '();</br>'// ESTA ES LA LINEA 106
      
}
      break; 
Aquí está la linea 106 donde da el problema

Código PHP:
     if (is_object($_SESSION[$objectName])) {
            
        
$_SESSION[$objectName]->$methodName();
        
$debugOutput .= '$_SESSION[' $objectName ']->' .  $methodName '();</br>';
      } else {

$objectName=$_SESSION[$objectName];
$
$objectName->$methodName();
$debugOutput .= '$' $objectName '->' $methodName '();</br>'//ESTA ES LA LINEA 106
      

alguna idea.

gracias

Última edición por zsamer; 12/05/2006 a las 01:18
  #2 (permalink)  
Antiguo 12/05/2006, 06:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Falta que muestres todo el código en su contexto (completo) ..

No se vé si haces inicio de sesiones: session_start() .. o si incluyes tu classe antes de pretender acceder a un método de esta si es que propagas el objeto en una sesión .. (pues los "métodos" no se propagan).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 12/05/2006, 09:21
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
estoy tratando de integrar el zencart a mi web modular, antes lo hize con el oscommerce y no tuve problemas.

el archivo es el autoload_func.php:

Código PHP:
<?php
/**
 * File contains the autoloader loop
 * 
 * The autoloader loop takes the array from the auto_loaders directory
 * and uses this this to constuct the InitSysytem. 
 * see {@link http://www.zen-cart.com/wiki/index.php/Developers_API_Tutorials#InitSystem} for more details.
 *
 * @package initSystem
 * @copyright Copyright 2003-2006 Zen Cart Development Team
 * @copyright Portions Copyright 2003 osCommerce
 * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
 * @version $Id: autoload_func.php 3019 2006-02-13 03:59:48Z birdbrain $
 */
if (!defined('IS_ADMIN_FLAG')) {
  die(
'Illegal Access');
}
reset($autoLoadConfig);
ksort($autoLoadConfig);
foreach (
$autoLoadConfig as $actionPoint => $row) {
  
$debugOutput "";
  foreach(
$row as $entry) {
    
$debugOutput 'actionPoint=>'.$actionPoint ' ';
    switch(
$entry['autoType']) {
      case 
'include':
      
/**
       * include a file as specified by autoloader array
       */
      
include($entry['loadFile']);
      
$debugOutput .= 'include(\'' $entry['loadFile'] . '\');' '</br>';
      break;
      case 
'require':
      
/**
       * require a file as specified by autoloader array
       */
      
require($entry['loadFile']);
      
$debugOutput .= 'include(\'' $entry['loadFile'] . '\');' '</br>';
      break;
      case 
'init_script':
      
$baseDir DIR_WS_INCLUDES 'init_includes/';
      if (
file_exists(DIR_WS_INCLUDES 'init_includes/overrides/' $entry['loadFile'])) {
        
$baseDir DIR_WS_INCLUDES 'init_includes/overrides/';
      }
      
/**
       * include an init_script as specified by autoloader array
       */
      
include($baseDir $entry['loadFile']);
      
$debugOutput .= 'include(\'' $baseDir $entry['loadFile'] . '\');' '</br>';
      break;
      case 
'class':
      if (isset(
$entry['classPath'])) {
        
$classPath $entry['classPath'];
      } else {
      
        
$classPath DIR_FS_CATALOG DIR_WS_CLASSES;
        
$classPath str_replace("modulos/catalogo/modulos/catalogo/","modulos/catalogo/",$classPath);
      }
      
/**
       * include a class definition as specified by autoloader array
       */
      
include($classPath $entry['loadFile']);
      
$debugOutput .= 'include(\'' $classPath $entry['loadFile'] . '\');' '</br>';
      break;
      case 
'classInstantiate':
      
$objectName $entry['objectName'];
      
$className $entry['className'];
      if (isset(
$entry['classSession']) && $entry['classSession'] === true) {
        if (isset(
$entry['checkInstantiated']) && $entry['checkInstantiated'] === true) {
          if (!isset(
$_SESSION[$objectName])) {
            
$_SESSION[$objectName] = new $className();
            
$debugOutput .= 'if (!$_SESSION[' $objectName ']) { ';
            
$debugOutput .= '$_SESSION[' $objectName '] = new ' $className '();';
            
$debugOutput .= ' }<br />';
          }
        } else {
          
$_SESSION[$objectName] = new $className();
          
$debugOutput .= '  $_SESSION[' $objectName '] = new ' $className '();</br>';
        }
      } else {
      

        $
$objectName = new $className();
        
$debugOutput .= '$' $objectName ' = new ' $className '();</br>';
      }
      break;
      case 
'objectMethod':
      
$objectName $entry['objectName'];
      
$methodName $entry['methodName'];
      if (
is_object($_SESSION[$objectName])) {
            
        
$_SESSION[$objectName]->$methodName();
        
$debugOutput .= '$_SESSION[' $objectName ']->' $methodName '();</br>';
      } else {

    
$objectName=$_SESSION[$objectName];
        $
$objectName->$methodName();
        
$debugOutput .= '$' $objectName '->' $methodName '();</br>';
      }
      break;
    }
    if (
DEBUG_AUTOLOAD === true) echo $debugOutput;
  }
}
?>
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 16:29.