2013-04-15 2 views
4

클래스를 확장하려고하지만 일부 시나리오에서는 메서드를 재정의합니다. 때로는 2 개의 매개 변수에서, 때로는 3 개로, 때로는 매개 변수가없는 경우가 있습니다.PHP - 매개 변수 개수가 다른 함수 재정의

불행히도 PHP 경고가 표시됩니다.

내 최소한의 검증 예 : error screen

가 어떻게 이런 오류를 방지 할 수 있습니다 내가 PHP 오류/경고/정보를 얻고 http://pastebin.com/6MqUX9Ui

<?php 

class first { 
    public function something($param1) { 
     return 'first-'.$param1; 
    } 
} 

class second extends first { 
    public function something($param1, $param2) { 
     return 'second params=('.$param1.','.$param2.')'; 
    } 
} 

// Strict standards: Declaration of second::something() should be compatible with that of first::something() in /home/szymon/webs/wildcard/www/source/public/override.php on line 13 

$myClass = new Second(); 
var_dump($myClass->something(123,456)); 

?

+3

을가 LSP http://en.wikipedia.org/wiki/Liskov_substitution_principle –

+0

참조 HTTP를 위반 당신은 할 수 없습니다 : // stackoverflow.com/questions/3115388/ – Uberfuzzy

답변

0

사용자 인터페이스/추상 클래스 또는 대부분의 부모 클래스, 메소드가받을 수 PARAMS의 최대 수를 cotantin해야합니다, 당신은 그들이 제공되지 않습니다, 그래서 만약 오류가 발생하지 않습니다 NULL로 명시 적으로 선언 할 수 있습니다 즉

Class A{ 
public function smth($param1, $param2='', $param3='') 

Class B extends A { 
public function smth($param1, $param2, $param3='') 

Class C extends B { 
public function smth($param1, $param2, $param3); 

이 경우 smth() 메서드를 'A'의 개체로 사용하면 하나의 매개 변수 ($ param1) 만 사용해야하지만 'B'개체와 동일한 메서드를 사용하면 2 개의 매개 변수 ($ param1, $ param2)를 사용하고 C에서 인스턴스화하면 모든 매개 변수를 제공해야합니다.

5

전혀, 당신의 방법에 인수없이 방법은 새로운 인수는 선택하는 것이 필요 그것의, ... 당신의 인수를 검색 할 func_get_args() 기능을 사용하는 방법 (서명에 기본값이 있음). 아래를 참조하십시오 : 더 자세히 들어

class Parent 
{ 
    protected function test($var1) { 
     echo($var1); 
    } 
} 

class Child extends Parent 
{ 
    protected function test($var1, $var2 = null) { 
     echo($var1); 
     echo($var1); 
    } 
} 

, 링크 체크 아웃 : http://php.net/manual/en/language.oop5.abstract.php

관련 문제