PHP 치명적 오류: 클래스를 다시 닫을 수 없습니다.
이 문제의 원인이 무엇인지 아는 사람이 있습니까?
PHP 치명적 오류: 클래스를 다시 닫을 수 없습니다.
같은 이름의 클래스가 두 번 이상 선언되었습니다.여러 번 포함하면 될 겁니다.다른 파일을 포함할 때 다음과 같은 기능을 사용해야 합니다.
include_once "something.php";
다중 포함을 방지합니다.서로 긴 체인의 파일을 포함할 수 있기 때문에 항상 명확한 것은 아니지만, 이 문제는 매우 쉽게 발생합니다.
이미 클래스를 만들었다는 의미입니다.
예:
class Foo {}
// some code here
class Foo {}
두 번째 Foo는 오류를 던질 것이다.
이는 한 페이지에 여러 번 클래스를 선언할 때 발생합니다.이 클래스는 if 스테이트먼트(아래와 같이)로 래핑하거나 별도의 파일에 저장하여 사용할 수 있습니다.require_once()
대신include()
.
if (!class_exists('TestClass')) {
// Put class TestClass here
}
사용하다include_once();
- 이것으로, 당신의 코드는 한 번만 포함됩니다.
php 라이브러리의 내장 클래스 중 하나를 사용하면 이 문제가 발생합니다.클래스명을 디렉토리로 사용했는데 같은 에러가 발생하였습니다.처음에 에러가 발생했을 경우는, 사용하고 있는 클래스명이 인빌트 클래스에 속하지 않는 것을 확인해 주세요.
이 에러는, 다음과 같이 정의할 경우에도 발생할 수 있습니다.__construct
메서드를 여러 번 사용합니다.
PHP의 Fast CGI의 버그로 인해 발생할 수 있습니다.
재기동을 시도합니다.Ubuntu는 다음과 같습니다.
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";
}
}
이 예에서는 네임스페이스 호환성을 유지하는 것이 목적입니다.namespace testClassNamespace;
두 파일 모두.
추가만 하면 됩니다.
이 에러는, 잘못해 다른 함수에 함수를 삽입했을 경우에도 발생할 수 있습니다.
PHP 5.3 (구 버전도 마찬가지인 것 같습니다)다른 케이스에서 같은 이름의 문제가 있는 것 같습니다.그래서 에 Login 클래스와 Login을 실장하는 인터페이스가 있을 때 이 문제가 있었습니다.로그인 이름을 Log_In으로 바꾸자 문제가 해결되었습니다.
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>';
}
클래스를 포함하는 파일 맨 위에 있는 이 함수를 호출합니다.
클래스가 2회 이상 포함되어 있어도, 인쇄가 1회 밖에 되지 않는 경우가 있습니다.이는 PHP가 실제로 코드를 실행하기 전에 파일 내의 모든 최상위 클래스를 해석하고 치명적인 오류를 즉시 발생시키기 때문입니다.이 문제를 해결하려면 클래스 선언을 로 감싸십시오.if(true) { ... }
그러면 클래스가 범위 내에서 한 단계 내려갑니다.그러면 PHP에 치명적인 오류가 발생하기 전에 두 개의 트레이스를 얻을 수 있습니다.
이를 통해 복잡한 프로젝트에서 여러 번 클래스가 포함된 위치를 찾을 수 있습니다.
Zend Framework?저도 같은 문제가 있어요.
제가 이 를 풀었는데, 그 풀었어요.config/application.ini
:
;includePaths.library = APPLICATION_PATH "/../library"
이것이 당신에게 도움이 되길 바랍니다.
또 다른 가능한 원인은 소스 제어와 해결되지 않은 충돌입니다.SVN은 충돌하는 코드 파일에 동일한 클래스를 두 번 표시할 수 있습니다. 즉, 두 가지 대체 버전("mine")과 "they"입니다.
같은 문제를 안고 있습니다.새로운 php 버전은 (라이브러리와 같은) 같은 파일의 여러 포함을 취급하지 않기 때문에 include_once에 의해 include를 모두 include_once.
아니면 이 속임수들이 도움이 될 수도 있어 도서관에서 수업을 너무 많이 듣는다면...
if( class_exists('TestClass') != true )
{
//your definition of TestClass
}
PHP Fatal error: Cannot redlare class XYZ.php라는 동일한 문제가 발생하였습니다.
다음과 같은 디렉토리가 두 개 있습니다.controller
★★★★★★★★★★★★★★★★★」model
디렉토리의 XYZ.. (문제의 입니다).php. (영어)
첫 번째 솔루션:
프로젝트 전체를 검색하여 클래스 XYZ.php가 1개뿐인지 확인합니다.
두 번째 솔루션:
클래스에 네임스페이스를 추가하여 동일한 클래스 이름을 사용할 수 있습니다.
이는 클래스가 이미 페이지에 선언되어 다시 생성하려고 한다는 것을 의미합니다.
간단한 기술은 다음과 같습니다.
저는 다음과 같이 문제를 해결했습니다.이것이 당신에게 도움이 되길 바랍니다.
if(!class_exists("testClassIfExist"))
{
require_once("testClassIfExist.php");
}
저도 같은 문제에 봉착했습니다.케이스가 클래스 이름인 걸 알아냈죠이름을 바꿔서 대처했습니다.문제를 해결합니다.
require_once() 함수를 사용해야 합니다.
언급URL : https://stackoverflow.com/questions/708140/php-fatal-error-cannot-redeclare-class
'programing' 카테고리의 다른 글
Python에서 싱글톤 만들기 (0) | 2022.09.13 |
---|---|
json 개체로 반환할 여러 DB 쿼리가 있습니다. 더 깔끔한 접근 방식? (0) | 2022.09.13 |
"SET NAMS" 사용 여부 (0) | 2022.09.12 |
pecl 확장을 설치하려고 하면 Mac os x 10.7.3에서 $PHP_AUTOCONF 오류가 발생함 (0) | 2022.09.12 |
PSR-0과 PSR-4의 차이점은 무엇입니까? (0) | 2022.09.12 |