Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

williamds

Destruir Classe

Recommended Posts

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

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

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. Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.