2013-05-20 1 views
0

PHP 5.3.13을 실행하는 동안 다음과 같은 오류가 발생하며 그 이유를 알 수 없습니다. 중요한 물건 줄일 수 있지만PHP 5.3.13에서 부모 메서드의 선언과 자식 메서드 선언이 호환되어야합니다.

이 아래에있는 내 PHP 코드는 유지하는 것입니다 CustomCourse :: toArray()의

선언 BaseCourse :: toArray()의 와 호환되어야합니다 필요한만큼만 게시물을 올리십시오.

Course 클래스는 toArray 메서드를 노출하지 않도록 추가해야합니다.

나는 다른 유사한 스레드를 볼 수 있지만 아무도 해결책을 제시하지 못합니다.

/** 
* this is the CHILD class 
*/ 
class CustomCourse extends BaseCourse { 

    public function toArray() { 
     $values = parent::toArray(); 
     // do some more with $values here 
     return $values; 
    } 

} 

/** 
* this is the PARENT class 
*/ 
class BaseContact extends Course { 

    public function toArray($platform = GOLF_PLATFORM) { 
     $values = array(); 
     $values['user_id'] = $this->getUserId(); 
     // do some more in here 
     return $values; 
    } 

} 
+0

@bcmcfc 그 대답의 문제는 내 질문에 대답하지 않는다는 것입니다 (내 게시물 참조). 이'childClass :: customMethod()는 다른 인수를 가지거나 parentClass :: customMethod()와 다른 접근 레벨 (public/private/protected)이 적용되지 않습니다. – crmpicco

+2

두 개의 toArray() 메서드에는 서로 다른 서명이 있습니다. BaseCourse는 매개 변수와 기본값을 사용하여 toArray를 구현하지만 CustomCourse는이를 재정의하고 서명에 정의 된 매개 변수 또는 기본값을 갖지 않습니다. – bcmcfc

+2

하위 클래스가 상위 클래스를 확장하지 않습니다. 질문에 오타가 있습니까? 그리고 왜 그 링크가 당신의 질문에 대답하지 않는다고 생각합니까? 당신은 방금 그런 대답의 아주 정확한 복제본을 받아 들였습니다. –

답변

1

이것은 PHP에서보고 한 엄격한 오류입니다.

논의

여기에 다음과 Declaration of Methods should be Compatible with Parent Methods in PHP 해상도를 들어

, 당신은 두 가지 방법에 대해 같은 선언을 사용해야합니다.

class CustomCourse extends BaseCourse { 
    function toArray($platform=GOLF_PLATFORM) { 
     //do something 
    } 
} 

또는 php.ini 파일에서 엄격한 오류 검사를 해제 할 수 있습니다.

+0

오류를 끄는 것은 항상 나쁜 생각입니다. –

+0

엄격한 오류를 끄면 많은주의 사항이 제거됩니다. 경고 및 실제 오류는 항상 지켜 져야합니다. – Achrome

+0

IMHO 공지가 표시되지 않습니다. 이 경우, 개념적 오류가 인터페이스 내에서 하나의 서명을 갖는 메소드를 선언 한 다음, 그 결합에 다른 하나를 사용하는 것인가? PHP는 전통적인 메소드 오버로딩을 지원하지 않기 때문에 서명은 항상 동일해야합니다. 당신의 첫 번째 제안은 해결책이며, 숨김 오류는 결코 해결책이 아닙니다. –