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

Problema con las variables globales

Estas en el tema de Problema con las variables globales en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, soy nuevo con PHP, pero tengo algo de experiencia con otros lenguajes como por ejemplo el C y sus versiones OOP. Resulta que trabajando ...
  #1 (permalink)  
Antiguo 03/01/2010, 20:14
 
Fecha de Ingreso: enero-2010
Mensajes: 3
Antigüedad: 14 años, 11 meses
Puntos: 0
Problema con las variables globales

Hola, soy nuevo con PHP, pero tengo algo de experiencia con otros lenguajes como por ejemplo el C y sus versiones OOP.
Resulta que trabajando en la construccion de una web, en quise modelar entre otras cosas una clase con la cual crear un objeto que fuera llevando actualizados datos de mi interés, comencé a trabajar y como soy nuevo en PHP, descargé manuales e instalé mi servidor web, con "todo", el paquete xammp y eclipse para trabajar con PHP. En este proyecto creé un index.php con este código:
Cita:
<?php
include 'classes.inc';

//$GLOBALS['system']-> begin();


$_SESSION['system']->begin();
//$_SESSION['system']->goAHead();
//$system->begin();
//echo '<a href= "fail.php">anja!</a>'
?>
el fichero de las clases: classes.inc:
Cita:
<?php
define('_MYSQLHOST', 'localhost:3306'); //el servidor MySQL que está aquí en mi máquina
define('_MYSQLUSER', 'root');
define('_MYSQLPASSWORD', '');
define('_DATABASE', 'basedatos');

class _User
{

}

class _System
{
var $connection;
var $fail= 0;
var $fowardPage= 'index.php';

/*function storeData()
{
$store= serialize($this);
$file= fopen('system.str', 'a');
fwrite($file, $store);
fclose($file);
}

function loadData()
{
$load= implode('', @file('system.str'));
$this= unserialize($load);
}*/

function begin()
{
$this->connection= mysql_connect(_MYSQLHOST, _MYSQLUSER, _MYSQLPASSWORD);
if ($this->connection)
{
if (mysql_select_db(_DATABASE, $this->connection))
{
$temporalQuery= mysql_query('select isPageInLine from tool', $this->connection);
$temporalArray= mysql_fetch_array($temporalQuery);
if ($temporalArray[0])
{
header('Location: initial.php');
}
else
{
$this->fail= 100;//Este es el numero del error de la pagina fuera de linea
header('Location: fail.php');
}
}
else
{
$this->fail= 99;//Este es el numero del error de que no se pudo por alguna razon acceder a la base de datos
header('Location: fail.php');
}
}
else
{
$this->fail= mysql_errno($this->connection);
header('Location: fail.php');
}
}


function end()
{

}

function reasonOfFail()
{
//switch ()
return $this->fail;
}

function connect()
{

}

function disconnect()
{

}
}

//$GLOBALS['system']= new _System();
if (!isset($_SESSION['system']))
{
session_start();
$_SESSION['system']= new _System();
}
//$system= new _System;

?>
y otro fihero al que se remite si tiene error: fail.php:

Cita:
<?php
include 'classes.inc';

//var_dump($GLOBALS['system']);
echo $_SESSION['system']->reasonOfFail();
//echo $system->fail;
?>
faltaría el initial.php pero no interesa porque en realidad el objeto (system instancia de la clase _System) que serialicé o sea metí en la matriz $_SESSION cuando por ejemplo quiero comprobar que el control de errores funciona bien y cambio por ejemplo el nombre de la base de datos, el objeto en la matriz ($_SESSION['system']) toma los valores debidos hasta que redirecciona con header a la pag fail.php y los pone todos (o sea los atributos de system) a su estado inicial cuando no hay redireccionamiento, porque anulo yo mismo la llamada a header pues en ma caperta c:\xampp\temp las sessiones esos ficheritos temporales, aletorios y serializados toman los valores que quiero, mi atributo $fail toma el valor 99 que debería, pero cuando redirecciono nuevamente toma cero, porque en el fichero de session correspondiente el objeto se escribe de nuevo.

He probado muchas cosas, he probado a cambiar header por un vínculo de HTML y lo mismo; revisé mi php.ini para ver si el valor de register_globals está en en off y mirar los valores de session_save_path y todo bien, unico que funciona es serializar a la antigua y meter en un fichero, pero eso no me sirve ya que con un sistema multiusuarios no hay manera . A lo mejor es que he pasado por alto algunas cosas y no me doy cuenta, como soy novato pero creame por investigar y estudiar no ha sido, en mi codigo quedan restos de las tantas y tantas pruebas de todo lo posible. De ante manos disculpen las molestias y seguro que con Uds resuelvo, no en valde son el mejor foro de ayuda a la programación de la WEB
Saludos
  #2 (permalink)  
Antiguo 04/01/2010, 10:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Problema con las variables globales

Prueba poniendo tu session_start() antes de checar si existe $_SESSION['system'].

Saludos.
  #3 (permalink)  
Antiguo 07/01/2010, 19:48
 
Fecha de Ingreso: enero-2010
Mensajes: 3
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Problema con las variables globales

perfecto, solucionado gracias, ya les preguntaré de nuevo. Creía que había probado eso, cuando anulé el If () de chequeo de existencia de $_SESSIONS['system'], pero por aluna razón me atudí y tiré la toalla, muchas gracias
  #4 (permalink)  
Antiguo 08/01/2010, 06:39
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años, 6 meses
Puntos: 32
Respuesta: Problema con las variables globales

Que tal, de paso -al ver tú código- sugerencia
  • Separa las clases en archivos independientes
  • Usa el estándar de NombreDeClase, en singular y primer letra en mayúsculas, no uses un "_" al principio de cada clase.
  • "var" is deprecated
  • las globals, prohibidas
Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

Etiquetas: globales, variables
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 21:19.