2012-12-11 4 views
0

... 그런PHP에서 클래스/함수 선언 문제를 해결하는 방법 ..? 내가 부모 클래스는 기능이 기본 클래스 라이브러리와 함께 일하고 있어요

function functionName($param) { 

} 

, 내가 가지고있는이 클래스를 확장 자식 클래스 ...

function functionName($param, $param2, $param3) { 

} 

나는 child_class의

선언 :: FUNCTIONNAME은() parent_cl의 그것과 호환되어야합니다 ...이 아이 클래스를 사용하여 호출, 나는 다음과 같은 PHP 사항으로 끝날 수 있도록 엉덩이 :: functionName()

코드는 여전히 성공적으로 완료되지만주의 사항은 나에게 걱정이며 나는 그것을 제거하고 싶습니다. 부모 클래스의 함수 버전에 추가 매개 변수를 추가하면 문제가 사라진다는 것을 발견했습니다. 이러한 매개 변수는 확장 클래스의 경우를 제외하고는 어디에도 필요하지 않으므로이를 추가해야한다는 것이 이상하게 보입니다. 그렇지 않습니까?

이러한 문제를 해결하는 더 좋은 방법이 있습니까, 아니면 특정 클래스가 실제로 필요로하는지 여부에 관계없이이 함수의 모든 인스턴스에 동일한 매개 변수를 추가해야합니까?

이 정보는 크게 감사하겠습니다. 감사!

+0

당신은 자식 클래스에서 모두 사용할 필요합니까? –

+0

PHP는 내가 아는 한 오버로드를 지원하지 않습니다.이 주제를 살펴보십시오. http://stackoverflow.com/questions/2994758/what-is-function-overloading-and-overriding-in-php – vodich

+0

내가 할 수있는 ' T는 문제를 복제하는 것 같습니다. 나는 부모 클래스의 메서드를 재정의하는 자식 클래스로 2 개의 클래스를 만들 수 있는데, 다른 서명 만 있으면 둘 다 정상적으로 작동하는 것 같습니다. 수업 코드를 게시 할 수 있습니까? –

답변

1

당신에게 N 도움이 될 수 있습니다 당신이 계급을 물려 받았다면 똑같은 서명을해야합니다.

빠른 해결 방법은 func_get_args를 사용하여 수행 할 수 있습니다 :

function functionName ($param1) { // This is in the derived clas 
    $params = func_get_args(); 
    $param2 = $params[1]; 
    $param3 = $params[2]; 
} 
+0

나는 팔로우 않고있다 .. ?? $ param1에는 무엇이 들어 있습니까? –

+0

@AndrewAngell - $ param1은 함수에서 기본적으로 할당됩니다. $ foo-> functionName (1, 2, 3)을 호출하면 PHP는 내부적으로 $ foo-> functionName (1)을 호출하고 func_get_args()는 array (1, 2, 3) – skyronic

1

당신은, 당신은 이름이 같은 방법을 제공함으로써 OOP 방법 재정이 서브 클래스의 오버라이드 (override)에 다음

"구현을 수행에가 (대체) 때문에 슈퍼 클래스의 구현의 추가적인 매개 변수를 추가 할 때 작동 말 동일한 매개 변수 또는 서명하고, 부모 클래스 "의 방법으로 같은 반환 유형은

는 링크 아래는

Declaration of Methods should be Compatible with Parent Methods in PHP

+0

내가 아닌 것 같아요. 수행원..?? 이것은 내가 일어날 것이라고 생각하는 것을 말하고있는 것처럼 보이고, 일어나는 것처럼 보이지만, 또한 나에게이 통고를 던지고있다. ?? –

관련 문제