Alguém sabe o que pode causar esse problema?
Erro fatal do PHP: não é possível redefinir a classe
php
class
fatal-error
Jin Yong
fonte
fonte
if(!class_exists('YourClass')){ include 'YourClass.php'; }
Respostas:
Isso significa que você já criou uma classe.
Por exemplo:
Esse segundo Foo lançaria o erro.
fonte
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
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.
fonte
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 deinclude()
.fonte
class_exists('TestClass') === false
ou!class_exists('TestClass')
Use
include_once();
- com isso, seus códigos serão incluídos apenas uma vez.fonte
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.
fonte
Este erro também pode ocorrer se você definir o
__construct
método mais de uma vez.fonte
Às vezes isso acontece devido a alguns erros no FastCGI do PHP.
Tente reiniciar. No Ubuntu é:
fonte
Eu tive o mesmo problema ao usar o
autoload
seguinte:e em outra classe houve:
A solução é manter a compatibilidade com o namespace, no meu exemplo
namespace testClassNamespace;
nos dois arquivos.fonte
Apenas adicionando;
Este erro também pode ocorrer se, por engano, você colocar uma função dentro de outra função.
fonte
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.
fonte
Basta fazer uma coisa sempre que incluir ou exigir o nome do arquivo, class.login.php. Você pode incluí-lo desta maneira:
Dessa forma, nunca gera um erro.
fonte
Esta função imprimirá uma pilha informando de onde foi chamada:
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.
fonte
Você usou o Zend Framework? Eu também tenho o mesmo problema.
Eu resolvi comentando isso na seguinte linha
config/application.ini
:Eu espero que isso te ajude.
fonte
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").
fonte
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 ...
fonte
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
emodel
e eu carregado por XYZ.php erroneamente em ambos os diretórios. (Assim arquivo com o mesmo nome causa a questão).Primeira solução:
Encontre em todo o seu projeto e verifique se você tem apenas uma classe XYZ.php.
Segunda solução:
Adicione um espaço para nome em sua classe para poder usar o mesmo nome de classe.
fonte
Eu encontrei o mesmo problema. descobriu que o caso era o nome da classe. eu lidei com isso mudando o nome. portanto, resolvendo o problema.
fonte
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.
fonte