복붙노트

PHP 치명적인 오류 : 클래스를 다시 선언 할 수 없습니다.

PHP

PHP 치명적인 오류 : 클래스를 다시 선언 할 수 없습니다.

누구든지이 문제를 일으킬 수있는 것을 알고 있습니까?

해결법

  1. ==============================

    1.이미 수업을 만들었 음을 의미합니다.

    이미 수업을 만들었 음을 의미합니다.

    예를 들면 :

    class Foo {}
    
    // some code here
    
    class Foo {}
    

    두 번째 Foo는 오류를 발생시킵니다.

  2. ==============================

    2.동일한 이름의 클래스가 두 번 이상 선언되었습니다. 어쩌면 여러 포함을 통해 가능합니다. 다른 파일을 포함 할 때는 다음과 같은 것을 사용해야합니다.

    동일한 이름의 클래스가 두 번 이상 선언되었습니다. 어쩌면 여러 포함을 통해 가능합니다. 다른 파일을 포함 할 때는 다음과 같은 것을 사용해야합니다.

    include_once "something.php";
    

    여러 가지 포함을 방지합니다. 서로의 파일이 긴 체인을 가질 수 있기 때문에 이것이 항상 발생하는 것은 쉽지 않습니다.

  3. ==============================

    3.이는 한 페이지에서 두 번 이상 클래스를 선언 할 때 발생합니다. if 문을 사용하여 해당 클래스를 래핑하거나 (아래처럼) 개별 파일에 넣을 수 있으며 include () 대신 require_once ()를 사용할 수 있습니다.

    이는 한 페이지에서 두 번 이상 클래스를 선언 할 때 발생합니다. if 문을 사용하여 해당 클래스를 래핑하거나 (아래처럼) 개별 파일에 넣을 수 있으며 include () 대신 require_once ()를 사용할 수 있습니다.

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

    4.include_once ()를 사용하십시오. - 이렇게하면 코드가 한 번만 포함됩니다.

    include_once ()를 사용하십시오. - 이렇게하면 코드가 한 번만 포함됩니다.

  5. ==============================

    5.PHP 라이브러리에서 내장 클래스를 사용하면이 문제가 발생합니다. 클래스 이름을 Directory로 사용했는데 같은 오류가 발생했습니다. 먼저 오류가 발생하면 사용하는 클래스 이름이 내장 클래스가 아닌지 확인하십시오.

    PHP 라이브러리에서 내장 클래스를 사용하면이 문제가 발생합니다. 클래스 이름을 Directory로 사용했는데 같은 오류가 발생했습니다. 먼저 오류가 발생하면 사용하는 클래스 이름이 내장 클래스가 아닌지 확인하십시오.

  6. ==============================

    6.이 오류는 __construct 메서드를 두 번 이상 정의 할 경우에도 발생할 수 있습니다.

    이 오류는 __construct 메서드를 두 번 이상 정의 할 경우에도 발생할 수 있습니다.

  7. ==============================

    7.때로 PHP의 FastCGI 버그로 인해 이런 일이 발생합니다.

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

    다시 시작하십시오. 우분투에서 :

    service php-fastcgi restart
    
  8. ==============================

    8.다음과 같이 autoload를 사용하는 동안 같은 문제가 발생했습니다.

    다음과 같이 autoload를 사용하는 동안 같은 문제가 발생했습니다.

    <?php
    
    function __autoload($class_name)
    {
        include $class_name . '.php';
    }
    
    
    __autoload("MyClass1");
    
    $obj = new MyClass1();
    
    ?>
    

    다른 반에는 다음과 같은 것이있었습니다. 네임 스페이스 testClassNamespace; MyClass1 클래스 {     함수 __construct ()     {         echo "MyClass1 생성자";     } } 해결 방법은 내 네임 스페이스 testClassNamespace에 네임 스페이스 호환성을 유지하는 것입니다. 두 파일에서.

  9. ==============================

    9.그냥 추가;

    그냥 추가;

    실수로 다른 함수에 함수를 넣은 경우에도이 오류가 발생할 수 있습니다.

  10. ==============================

    10.PHP 5.3 (이전 버전이라 생각합니다)은 다른 경우에 같은 이름으로 문제가있는 것 같습니다. 그래서 내가 클래스 Login과 LogIn을 구현 한 인터페이스를 가지고있을 때 나는이 문제를 가지고 있었다. LogIn의 이름을 Log_In으로 변경 한 후 문제가 해결되었습니다.

    PHP 5.3 (이전 버전이라 생각합니다)은 다른 경우에 같은 이름으로 문제가있는 것 같습니다. 그래서 내가 클래스 Login과 LogIn을 구현 한 인터페이스를 가지고있을 때 나는이 문제를 가지고 있었다. LogIn의 이름을 Log_In으로 변경 한 후 문제가 해결되었습니다.

  11. ==============================

    11.이 함수는 스택이 어디에서 호출되었는지 알려줍니다.

    이 함수는 스택이 어디에서 호출되었는지 알려줍니다.

    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가 실제로 코드를 실행하기 전에 파일의 모든 최상위 클래스를 구문 분석하고 치명적인 오류를 즉시 throw하기 때문입니다. 이 문제를 해결하려면 클래스 선언을 if (true) {...}에 래핑하면 클래스를 범위 내에서 수준 아래로 옮길 수 있습니다. 그럼 PHP 치명적인 오류가 발생하기 전에 두 가지 흔적을 가져와야합니다.

    이렇게하면 복잡한 프로젝트에서 여러 번 포함 된 클래스를 찾을 수 있습니다.

  12. ==============================

    12.파일 이름 즉 class.login.php를 포함 시키거나 필요로 할 때마다 한 가지 일을하십시오. 이런 식으로 포함시킬 수 있습니다.

    파일 이름 즉 class.login.php를 포함 시키거나 필요로 할 때마다 한 가지 일을하십시오. 이런 식으로 포함시킬 수 있습니다.

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

    이렇게하면 절대로 오류가 발생하지 않습니다.

  13. ==============================

    13.Zend Framework를 사용 했습니까? 나도 똑같은 문제가있다. config / application.ini 파일에서 다음 내용을 주석 처리하여 해결했습니다.

    Zend Framework를 사용 했습니까? 나도 똑같은 문제가있다. config / application.ini 파일에서 다음 내용을 주석 처리하여 해결했습니다.

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

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

  14. ==============================

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

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

  15. ==============================

    15.그 같은 문제가 발생했습니다 : 최신 PHP 버전은 동일한 파일 (라이브러리)을 여러 개 포함하여 동일하게 처리하지 않으므로 include_once로 모든 include를 변경해야합니다.

    그 같은 문제가 발생했습니다 : 최신 PHP 버전은 동일한 파일 (라이브러리)을 여러 개 포함하여 동일하게 처리하지 않으므로 include_once로 모든 include를 변경해야합니다.

    아니면 라이브러리에 너무 많은 수업이 없으면이 트릭이 도움이 될 수 있습니다.

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

    16."PHP 치명적인 오류 : 클래스 XYZ.php를 다시 선언 할 수 없습니다."같은 문제가 발생했습니다.

    "PHP 치명적인 오류 : 클래스 XYZ.php를 다시 선언 할 수 없습니다."같은 문제가 발생했습니다.

    나는 컨트롤러와 모델 같은 두 개의 디렉토리를 가지고 있으며 두 디렉토리에서 실수로 XYZ.php로 업로드했다. (그래서 같은 이름의 파일이 문제를 일으킨다.)

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

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

  17. ==============================

    17.그 같은 문제가 발생했습니다. 케이스가 클래스 이름임을 알았습니다. 나는 이름을 바꾸어 그것을 다루었 다. 따라서 문제를 해결하십시오.

    그 같은 문제가 발생했습니다. 케이스가 클래스 이름임을 알았습니다. 나는 이름을 바꾸어 그것을 다루었 다. 따라서 문제를 해결하십시오.

  18. ==============================

    18.실제로 클래스가 이미 페이지에 선언되어 있고 다시 작성하려고한다는 것을 의미합니다.

    실제로 클래스가 이미 페이지에 선언되어 있고 다시 작성하려고한다는 것을 의미합니다.

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

    나는 다음과 같은 문제를 해결했다. 희망이 조금 당신을 도울 것입니다.

    if(!class_exists("testClassIfExist"))
    {
        require_once("testClassIfExist.php");
    }
    
  19. from https://stackoverflow.com/questions/708140/php-fatal-error-cannot-redeclare-class by cc-by-sa and MIT license