문제

이 문제의 원인이 무엇인지 아는 사람이 있습니까?

PHP 치명적인 오류 : 클래스 클래스를 재개 할 수 없습니다

도움이 되었습니까?

해결책

그것은 당신이 이미 수업을 만들었 음을 의미합니다.

예를 들어:

class Foo {}

// some code here

class Foo {}

두 번째 Foo는 오류를 던질 것입니다.

다른 팁

같은 이름의 클래스가 두 번 이상 선언되었습니다. 아마도 여러 포함. 다른 파일을 포함시킬 때와 같은 것을 사용해야합니다.

include_once "something.php";

여러 포함을 방지합니다. 서로가 긴 파일을 포함시킬 수 있기 때문에 항상 명확하지는 않지만 이런 일이 발생하기가 매우 쉽습니다.

한 페이지에서 클래스를 두 번 이상 선언 할 때 발생합니다. IF 문으로 해당 클래스를 래핑하여 (아래와 같은) 클래스를 래핑하여 고정하거나 별도의 파일에 넣고 사용 할 수 있습니다. require_once(), 대신에 include().

if (!class_exists('TestClass')) {
   // Put class TestClass here
}

사용 include_once(); -이를 통해 코드는 한 번만 포함됩니다.

PHP 라이브러리에서 내장 된 클래스를 사용하는 경우 이런 일이 발생합니다. 클래스 이름을 디렉토리로 사용했고 같은 오류가 발생했습니다. 오류가 발생하면 먼저 사용하는 클래스 이름이 내장 클래스 중 하나가 아닌지 확인하십시오.

이 오류는 또한 정의하면 발생할 수 있습니다 __construct 방법 두 번 이상.

때로는 PHP의 FastCGI의 일부 버그로 인해 발생합니다.

다시 시작하십시오. 우분투에서는 다음과 같습니다.

service php-fastcgi restart

사용하는 동안 같은 문제가있었습니다 autoload 다음과 같이 :

<?php

function __autoload($class_name)
{
    include $class_name . '.php';
}


__autoload("MyClass1");

$obj = new MyClass1();

?>

그리고 다른 수업에는 다음이있었습니다.

namespace testClassNamespace;


class MyClass1
{

    function  __construct()
    {
        echo "MyClass1 constructor";
    }
}

Sollution은 내 예에서 네임 스페이스 호환성을 유지하는 것입니다. namespace testClassNamespace; 두 파일 모두에서.

그냥 추가;

실수로 다른 함수 내에 함수를 넣으면이 오류가 발생할 수 있습니다.

PHP 5.3 (이전 버전도 생각합니다)은 다른 경우에 동일한 이름에 문제가있는 것 같습니다. 그래서 A가 클래스 로그인하고 인터페이스가 로그인을 구현할 때이 문제가있었습니다. log_in에 로그인으로 이름을 바꾸면 문제가 해결되었습니다.

filename, 즉 class.login.php를 포함 시키거나 필요로 할 때마다 한 가지를 수행하십시오. 이 방법을 포함시킬 수 있습니다.

include_once class.login.php or 
require_once class.login.php

이렇게하면 결코 오류가 발생하지 않습니다.

이 함수는 스택을 인쇄하여 다음에서 호출되었는지 알려줍니다.

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>';
}

클래스가 포함 된 파일 상단 에서이 함수를 호출하십시오.

때로는 수업이 두 번 이상 포함되어 있어도 한 번만 인쇄됩니다. 이는 PHP가 코드를 실행하기 전에 실제로 모든 최상위 클래스를 파일에 구문 분석하고 즉시 치명적인 오류를 던지기 때문입니다. 이를 해결하려면 클래스 선언을 마무리하십시오 if(true) { ... }, 이로 인해 클래스를 범위로 수준으로 낮추게됩니다. 그런 다음 PHP 치명적인 오류 전에 두 가지 흔적을 가져와야합니다.

이를 통해 복잡한 프로젝트에서 수업이 여러 번 포함되는 곳을 찾는 데 도움이됩니다.

Zend 프레임 워크를 사용 했습니까? 나도 같은 문제가 있습니다.
나는 이것을 다음 줄에 댓글을 달아서 해결했다. config/application.ini:

;includePaths.library = APPLICATION_PATH "/../library"

이것이 당신을 도울 수 있기를 바랍니다.

또 다른 가능한 범인은 소스 제어 및 해결되지 않은 충돌입니다. SVN은 충돌 된 코드 파일에 동일한 클래스가 두 번 나타날 수 있습니다. IT의 두 가지 대체 버전 ( "광산"과 "ess").

동일한 문제에 직면했습니다. 최신 PHP 버전은 동일한 파일 (라이브러리)을 여러 가지 포함시키는 것과 동일하지 않으므로 이제 일부 내용을 포함하여 모든 포함 _once를 변경해야합니다.

또는이 트릭은 도서관에 너무 많은 수업을 가지고 있다면 도움이 될 수 있습니다 ...

if( class_exists('TestClass') != true )
{
   //your definition of TestClass
}

"PHP 치명적인 오류 : 클래스 클래스 xyz.php를 재정의 할 수 없음"과 같은 문제가있었습니다.

나는 두 가지 디렉토리가 있습니다 controller 그리고 model 그리고 나는 두 디렉토리 모두에서 실수로 xyz.php로 업로드했습니다. (따라서 같은 이름을 가진 파일은 문제를 일으킨다).

첫 번째 해결책 :

전체 프로젝트에서 찾아서 클래스 xyz.php가 하나만 있는지 확인하십시오.

두 번째 해결책 :

동일한 클래스 이름을 사용할 수 있도록 클래스에 네임 스페이스를 추가하십시오.

나는 같은 문제를 겪었습니다. 이 사건이 클래스 이름이라는 것을 알았습니다. 이름을 변경하여 처리했습니다. 따라서 문제를 해결합니다.

그것은 실제로 클래스가 이미 페이지에서 선언되었으며 그것을 재현하려고한다는 것을 의미합니다.

간단한 기술은 다음과 같습니다.

다음과 함께 문제를 해결했습니다. 이것이 당신에게 약간 도움이되기를 바랍니다.

if(!class_exists("testClassIfExist"))
{
    require_once("testClassIfExist.php");
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top