Alguém sabe o que pode causar esse problema?
Erro fatal do PHP: não é possível redefinir a classe
if(!class_exists('YourClass')){ include 'YourClass.php'; }
Alguém sabe o que pode causar esse problema?
Erro fatal do PHP: não é possível redefinir a classe
if(!class_exists('YourClass')){ include 'YourClass.php'; }
Respostas:
Isso significa que você já criou uma classe.
Por exemplo:
class Foo {}
// some code here
class Foo {}
Esse segundo Foo lançaria o erro.
Você tem uma classe com o mesmo nome declarada mais de uma vez. Talvez através de várias inclusões. Ao incluir outros arquivos, você precisa usar algo como
include_once "something.php";
para impedir várias inclusões. É muito fácil que isso aconteça, embora nem sempre seja óbvio, pois você pode ter uma longa cadeia de arquivos sendo incluídos um pelo outro.
Isso acontece quando você declara uma classe mais de uma vez em uma página. Você pode corrigi-lo envolvendo essa classe com uma instrução if (como abaixo), ou pode colocá-lo em um arquivo separado e usá-lo require_once()
, em vez de include()
.
if (!class_exists('TestClass')) {
// Put class TestClass here
}
class_exists('TestClass') === false
ou!class_exists('TestClass')
Isso acontecerá se usarmos alguma das classes incorporadas na biblioteca php. Usei o nome da classe como Diretório e recebi o mesmo erro. Se você receber um erro, verifique se o nome da classe que você usa não é um das classes incorporadas.
Este erro também pode ocorrer se você definir o __construct
método mais de uma vez.
Às vezes isso acontece devido a alguns erros no FastCGI do PHP.
Tente reiniciar. No Ubuntu é:
service php-fastcgi restart
Eu tive o mesmo problema ao usar o autoload
seguinte:
<?php
function __autoload($class_name)
{
include $class_name . '.php';
}
__autoload("MyClass1");
$obj = new MyClass1();
?>
e em outra classe houve:
namespace testClassNamespace;
class MyClass1
{
function __construct()
{
echo "MyClass1 constructor";
}
}
A solução é manter a compatibilidade com o namespace, no meu exemplo namespace testClassNamespace;
nos dois arquivos.
O PHP 5.3 (acho que versões mais antigas também) parece ter problemas com o mesmo nome em diferentes casos. Então, eu tive esse problema quando tinha a classe Login e a interface que implementa o LogIn. Depois de renomear o LogIn para Log_In, o problema foi resolvido.
Basta fazer uma coisa sempre que incluir ou exigir o nome do arquivo, class.login.php. Você pode incluí-lo desta maneira:
include_once class.login.php or
require_once class.login.php
Dessa forma, nunca gera um erro.
Esta função imprimirá uma pilha informando de onde foi chamada:
function PrintTrace() {
$trace = debug_backtrace();
echo '<pre>';
$sb = array();
foreach($trace as $item) {
if(isset($item['file'])) {
$sb[] = htmlspecialchars("$item[file]:$item[line]");
} else {
$sb[] = htmlspecialchars("$item[class]:$item[function]");
}
}
echo implode("\n",$sb);
echo '</pre>';
}
Chame essa função na parte superior do arquivo que inclui sua turma.
Às vezes, ele será impresso apenas uma vez, mesmo que sua turma esteja sendo incluída duas ou mais vezes. Isso ocorre porque o PHP realmente analisa todas as classes de nível superior em um arquivo antes de executar qualquer código e gera o erro fatal imediatamente. Para remediar isso, envolva sua declaração de classe if(true) { ... }
, o que fará com que sua classe desça um nível no escopo. Então você deve obter seus dois rastreamentos antes dos erros fatais do PHP.
Isso deve ajudá-lo a descobrir onde sua classe está sendo incluída várias vezes em um projeto complexo.
Outro possível culpado é o controle de origem e conflitos não resolvidos. SVN pode fazer com que a mesma classe apareça duas vezes no arquivo de código em conflito; duas versões alternativas dele ("meu" e "deles").
Eu encontrei o mesmo problema: a versão mais recente do php não lida da mesma forma com várias inclinações do mesmo arquivo (como uma biblioteca), então agora eu tenho que mudar todas as minhas inclusões por algumas include_once.
Ou esses truques podem ajudar, se você não tiver muita aula em sua biblioteca ...
if( class_exists('TestClass') != true )
{
//your definition of TestClass
}
Eu tive o mesmo problema "Erro fatal do PHP: não é possível redefinir a classe XYZ.php".
Eu tenho dois diretórios como controller
e model
e eu carregado por XYZ.php erroneamente em ambos os diretórios. (Assim arquivo com o mesmo nome causa a questão).
Encontre em todo o seu projeto e verifique se você tem apenas uma classe XYZ.php.
Adicione um espaço para nome em sua classe para poder usar o mesmo nome de classe.
Na verdade, isso significa que a classe já está declarada na página e você está tentando recriá-la.
Uma técnica simples é a seguinte.
Resolvi o problema com o seguinte. Espero que isso ajude um pouco.
if(!class_exists("testClassIfExist"))
{
require_once("testClassIfExist.php");
}