Foros del Web » Programando para Internet » PHP »

Problema con Classe

Estas en el tema de Problema con Classe en el foro de PHP en Foros del Web. Holaa ah todos.. pues tengo un pequeño problema con una classe y no entiendo porque.. de ves en cuando !! cuando carga el script php ...
  #1 (permalink)  
Antiguo 01/01/2011, 19:21
 
Fecha de Ingreso: abril-2009
Mensajes: 45
Antigüedad: 15 años, 7 meses
Puntos: 1
Problema con Classe

Holaa ah todos.. pues tengo un pequeño problema con una classe y no entiendo porque..

de ves en cuando !! cuando carga el script php que es un Panel "con un login" me aparece esto.

Catchable fatal error: Object of class template could not be converted to string in /home/xxxxxx/public_html/puntos/includes/skin.php on line 57

y la unica forma de que me deje de aparecer el error es borrando todo el historial reciente una ves borrado ya puedes entrar sin ningun tipo de error pero sigo sin entender porque sale eso

Skin.php
Código PHP:
<?php


$url 
"skins/".$skin;
if((
file_exists($url."/skin.php") == false) && (file_exists("../".$url."/skin.php") == false)) {
$url "skins/default";
}

/* Configuracion del la Skin  Default*/
if(file_exists("./skins/default/skin.php")) {
include(
"./skins/default/skin.php");
}
elseif(
file_exists("./../skins/default/skin.php")) {
include(
"./../skins/default/skin.php");
}
else {
die(
"<b>No se pudo carga la skin:</b> \"Default\"");
}


//Cargar COnfiguracion del la Skin
if(file_exists("./skins/".$skin."/skin.php")){
include(
"./skins/".$skin."/skin.php");
}
elseif(
file_exists("./../skins/".$skin."/skin.php")) {
include(
"./../skins/".$skin."/skin.php");
}
else {
die(
"No se encontro el archivo Skin.php de la Skin");
}

function 
theme_login() {
global 
$sitename,$skin,$head_top,$reversion,$url;
$item["sitename"] = $sitename;
$item["url"] = $url;
$item["version"] = $reversion;
echo 
$head_top;
if(
file_exists("./skins/".$skin."/login.html")) {
$skin = new template("./skins/".$skin."/login.html");
}
else {
$skin = new template("./skins/default/login.html");
}
$skin->replace($item);
$skin->salida();
}

function 
theme_vote() {
global 
$sitename,$skin,$head_top,$reversion,$url;
$item secure();
echo 
$head_top;
$item["url"] = $url;
$item["version"] = $reversion;
$item["sitename"] = $sitename;
$item["load_vote"] = loadtops();
$item["load_vote_list"] = loadtops(1);
if(
file_exists("./skins/".$skin."/votos.html")) {
$skin = new template("./skins/".$skin."/votos.html");
}
else {
$skin = new template("./skins/default/votos.html");
}
$skin->replace($item);
$skin->salida();
}

function 
theme_login_admin() {
global 
$sitename,$head_top_admin,$url,$skin,$reversion;
$item["version"] = $reversion;
$item["url"] = "../".$url;
$item["sitename"] = $sitename;
echo 
$head_top_admin;
if(
file_exists("./../skins/".$skin."/login_admin.html")) {
$skin = new template("./../skins/".$skin."/login_admin.html");
}
else {
$skin = new template("./../skins/default/login_admin.html");
}
$skin->replace($item);
$skin->salida();
}

function 
theme_panel_admin() {
global 
$sitename,$head_top_admin,$url,$skin,$reversion;
$item["version"] = $reversion;
$item["url"] = "../".$url;
$item["sitename"] = $sitename;
$item["load_tops"] = loadtops_admin();
echo 
$head_top_admin;
if(
file_exists("./../skins/".$skin."/panel_admin.html")) {
$skin = new template("./../skins/".$skin."/panel_admin.html");
}
else {
$skin = new template("./../skins/default/panel_admin.html");
}
$skin->replace($item);
$skin->salida();
}

function 
theme_addtop_admin() {
global 
$sitename,$head_top_admin,$url,$skin,$reversion;
$item["version"] = $reversion;
$item["url"] = "../".$url;
$item["sitename"] = $sitename;
echo 
$head_top_admin;
if(
file_exists("./../skins/".$skin."/addtop_admin.html")) {
$skin = new template("./../skins/".$skin."/addtop_admin.html");
}
else {
$skin = new template("./../skins/default/addtop_admin.html");
}
$skin->replace($item);
$skin->salida();
}

function 
theme_edittop_admin() {
global 
$sitename,$head_top_admin,$url,$skin,$reversion;
$item["version"] = $reversion;
$item["url"] = "../".$url;
$item["sitename"] = $sitename;
$info topload_admin();
echo 
$head_top_admin;
if(
file_exists("./../skins/".$skin."/edittop_admin.html")) {
$skin = new template("./../skins/".$skin."/edittop_admin.html");
}
else {
$skin = new template("./../skins/default/edittop_admin.html");
}
$skin->replace($item);
$skin->replace($info);
$skin->salida();
}



?>
la linea 57 es esta:
$skin = new template("./skins/".$skin."/votos.html");

y la Classe es esta:

Código PHP:
<?php

if (eregi("classes.php",$_SERVER["REQUEST_URI"])) {
    
header("HTTP/1.0 404 Not Found");
    die();
}

class 
template {

var 
$template;
var 
$data;

public function 
__construct($file NULL) {
if(
$file != NULL) {
if(
is_string($file)) {
if(
file_exists($file)) {

$load file_get_contents($file);
/*
$load = str_replace("'","\'",$load);
$load = str_replace('"','\"',$load);
*/
$this->template $file;
$this->data $load;

}
else {
die(
"Archivo no Encontrado $file");
}

}
else {
die(
"Contenido No Valido");
}

}
else {
die(
"Plantilla Vacia");
}

}

function 
replace($contenido) {
if(
$contenido != NULL) {
if(
is_array($contenido)) {

foreach(
$contenido as $key => $value) {

$esto['{$'.$key.'}'] = $value;

}

$this->data strtr($this->data,$esto);


}
else {
die(
"Contenido no Valido");
}

}
else {
die(
"Contenido Vacio");
}

}


function 
salida() {

echo 
$this->data;

}

function 
__destruct() {
unset(
$this->data);
unset(
$this->template);
}





}

?>
BuenO Gracias de ^^
  #2 (permalink)  
Antiguo 02/01/2011, 12:12
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Problema con Classe

lo que sucede es que estas usando la misma variable $skin en varios escenarios, lo cual esta mal...

digamos que $skin tiene un valor string y eso esta bien, pero si después instancias un objeto en dicha variable, la próxima ves que uses $skin te saldrá un error justo como el que tienes ahora... (:

¿se entiende?

lo mas sencillo para solucionarlo es usar otra variable para instanciar el objeto, y claro, reflexionar...
Código PHP:
$obj_skin = new template("./skins/".$skin."/votos.html"); 
y de verdad, ¿que tanto te costaba usar un traductor para entender el mensaje de error?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 02/01/2011, 17:53
 
Fecha de Ingreso: abril-2009
Mensajes: 45
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Problema con Classe

MMM solo una cosa...

Como notas o.O hay distintas funciones con cada una $skin no?...
entonces seupone que en la class tengo la funcion destruct__
entonces sesupone que debe destruirlo..

suponiendo que no la destruyee .. cada funcion se imprime en paginas diferentes o.O

osea esas funciones son de distintas .. en ninguno de los casos la funcion $skin-> se caarga 2 veses o.O .. ya sospechaba ke era esoo pero solo rara ves pasa ...
y como nunk carga 2 veses no se me ocurrio

espero que me ayudes a entendewr eso thx ^^
  #4 (permalink)  
Antiguo 02/01/2011, 19:29
 
Fecha de Ingreso: octubre-2009
Mensajes: 245
Antigüedad: 15 años, 2 meses
Puntos: 17
Respuesta: Problema con Classe

Cita:
Iniciado por AztekaMX Ver Mensaje
MMM solo una cosa...

Como notas o.O hay distintas funciones con cada una $skin no?...
entonces seupone que en la class tengo la funcion destruct__
entonces sesupone que debe destruirlo..

suponiendo que no la destruyee .. cada funcion se imprime en paginas diferentes o.O

osea esas funciones son de distintas .. en ninguno de los casos la funcion $skin-> se caarga 2 veses o.O .. ya sospechaba ke era esoo pero solo rara ves pasa ...
y como nunk carga 2 veses no se me ocurrio

espero que me ayudes a entendewr eso thx ^^
Si pero tu variable tiene un contexto global y no local en la funcion por lo que en algun punto de tu script $skin no es un string
  #5 (permalink)  
Antiguo 03/01/2011, 09:38
 
Fecha de Ingreso: abril-2009
Mensajes: 45
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Problema con Classe

mmm

serviria de algo poner

Código PHP:
unset($skin
al final de cada funcion?
  #6 (permalink)  
Antiguo 03/01/2011, 12:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Problema con Classe

Cita:
Iniciado por AztekaMX Ver Mensaje
mmm

serviria de algo poner

Código PHP:
unset($skin
al final de cada funcion?
creo que aún no has entendido nada de lo que se te ha dicho...

si haces unset() a lo que te arriesgas es a destruir la información de dicha variable en el contexto global, pues al parecer no sabes lo que estas haciendo con todo tu código...

la solución mas fácil, rápida y corta es usar otro nombre de variable al instanciar el objeto template(), así, aunque uses $skin globalmente jamás la vas a sobre escribir (que es lo que haces actualmente), y así $skin seguirá conservando su valor string...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: classe
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 05:52.