williamds 0 Denunciar post Postado Julho 6, 2007 Boa tarde phpeiros. Quem saberia destruir, detonar, estragar e sumir com uma classe? Vou explicar, Peguei um site pra terminar e esta totalmente 100% usando OO, e eu preciso destruir uma classe que foi instanciada $code = new code(); e esta dando um erro Fatal error: Cannot redeclare class code in C:\diretorio\site.com.br\adm\php\mods\leia\code.php on line 16 É que nesta pagina existe um FOR que busca no BD o nome dos modulos que serão gerados por essa pagina e nesse FOR é chamado cada modulo que tem uma classe com o mesmo nome. Pensei em renomear as classe, mas, quando o sistema pede para gerar os modulos eles podem ser de 1 a n, ou seja o administrador escolhe qual, onde e quantos modulos serão gerados, então não tem como eu saber quantos modulos serão gerados e sempre poderá haver mais um. É um portal de noticia, e o acesso ao banco é apenas para se gerar as noticias e os modulos em html. Ah, o unset() não rolou. abraços a todos Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Julho 7, 2007 o correto seria você verificar se a classe existe antes de criá-la veja na documentação http://de3.php.net/manual/pt_BR/function.class-exists.php Compartilhar este post Link para o post Compartilhar em outros sites
williamds 0 Denunciar post Postado Julho 10, 2007 Da uma olhada no codigo É uma parte da pagina publicar_noticia.php for($a=1;$a<=sizeof($sel_modarea);$a++){ // seleciona os dados do modulo $phplet->acao_op = "seleciona"; $phplet->editavel = 0; $phplet->id_modulo = $sel_modarea[$a]["id_modulo"]; $modulo = $phplet->modulo(); for($m=1;$m<=sizeof($modulo);$m++){ // chama o include necessario para gerar include if(file_exists("E:\IIS_Sites\cosmo.com.br\_webconsole\scripts".$modulo[$m]["caminho"]."\code.php")){ require_once("E:\IIS_Sites\cosmo.com.br\_webconsole\scripts".$modulo[$m]["caminho"]."\code.php"); }else{ exit ("Não foi incluído o code.php deste modulo"); }/* echo $caminho_scripts."<b>".$modulo[$m]["caminho"]."</b>"; if(file_exists($caminho_scripts.$modulo[$m]["caminho"]."\code.php")){ require_once($caminho_scripts.$modulo[$m]["caminho"]."\code.php"); }else{ exit ("Não foi incluído o code.php deste modulo"); } */ // Cria objeto code $code = new code(); if($n[1]["id_subtopico"]){ $nome_area = "subtopico"; $id_area = $n[1]["id_subtopico"]; }elseif($n[1]["id_topico"]){ $nome_area = "topico"; $id_area = $n[1]["id_topico"]; }elseif($n[1]["id_subcanal"]){ $nome_area = "subcanal"; $id_area = $n[1]["id_subcanal"]; }else{ $nome_area = "canal"; $id_area = $n[1]["id_canal"]; } // GERA OS MODULOS AUTOMATICOS DO CANAL $phplet->acao_op = "seleciona"; $phplet->id_modulo = $modulo[$m]["id_modulo"]; $par = '$phplet->id_'.$nome_area.'='.$id_area.';'; //echo $par."<br>"; eval($par); $par = '$sel_area = $phplet->modulo'.$nome_area.'();'; //echo $par."<br>"; eval($par); // verifica se este canal possui modulos automaticos if($sel_area){ // chama a funcção que gera o modulo $code->nome_area = $nome_area; $code->id_area = $id_area; $code->ordem_modulo = $sel_area[1]["ordem"]; //$code->recebe(); } // GERA OS MODULOS AUTOMATICOS DA CAPA QUE TAMBÈM APARECERÃO ESTA NOTICIA $phplet->acao_op = "seleciona"; $phplet->id_modulo = $modulo[$m]["id_modulo"]; $phplet->id_canal=1; $sel_capa = $phplet->modulocanal(); // verifica se este canal possui modulos automaticos if($sel_capa){ // chama a funcção que gera o modulo $code->nome_area = "canal"; $code->id_area = 1; $code->ordem_modulo = $sel_capa[1]["ordem"]; //$code->recebe(); } unset($code); }Todos os modulos tem uma classe chamada code Compartilhar este post Link para o post Compartilhar em outros sites
lucasmartins 6 Denunciar post Postado Setembro 24, 2009 Em algumas classes e funçoes, como classe de Conexão e função __autoload, eu costumo verificar se ela já não existe antes de criar... por exemplo: <?php if (!class_exists(ConexaoDAO)) { class ConexaoDAO { var $pdo; /** * */ function __construct() { try { if ($_SERVER['SERVER_NAME'] == 'localhost') { $this->pdo = new PDO('mysql:host=localhost;dbname=carshop', 'usu1','pass1'); } else { $this->pdo = new PDO('mysql:host=localhost;dbname=clicarshop', 'clicarshop_1','pass1'); } } catch (PDOException $e) { echo "Conexão falhou: ".$e->getMessage(); } return $this->pdo; } /** * */ function __destruct() { //unset($this->pdo); } } } ?> Se eu estiver errado me corrijam por favor, porq sempre faço isso. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Setembro 25, 2009 o ideal seria verificar no momento em que é chamado Compartilhar este post Link para o post Compartilhar em outros sites
lucasmartins 6 Denunciar post Postado Setembro 25, 2009 o ideal seria verificar no momento em que é chamado Tanto faz... mas se for ver, uma função ou classe é criada para facilitar a vida do programador e ter uma estrutura melhor... é melhor verificar 1 vez soh direto no arquivo da classe... assim ele não vai precisar fazer a manutenção em todas as chamadas... Abraços Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Setembro 25, 2009 ok, faça conforme for conveniente para o seu caso Compartilhar este post Link para o post Compartilhar em outros sites