메서드 오버로딩
함수 이름이 다릅니다. 함수의 개수나 매개변수 유형이 다르기 때문에 동일한 함수 이름을 호출해도 서로 다른 함수를 구분할 수 있습니다.
클래스 A{
공용 함수 test1(){
echo "test1";}
공용 함수 test1($a){
echo "test1 hhh";}
}
오버로드
$a=newA();
$a->test1();
$a->test1(222);
위의 사용법이 올바르지 않습니다
마법의 함수 메소드 오버로딩 구현
class A{
public function test1($p){
echo "하나의 매개변수 허용";}
public function test1($p){
echo "두 개의 매개변수 허용" }
}
__call 제공
__call은 특정 메서드를 호출하는 개체입니다. 해당 메서드가 없으면 시스템이 자동으로 __call
함수를 호출합니다($method,$p) {
var_dump($p);
if($method=="test1"){
if(count($p)==1){
$this->test1($p );
}else if(count($p)==2){
$this->test2($p);
}
}
}
$a=newA();
$a->test(1);
$a->test(1,2);
마법 함수
__set,__get,__construct,__destruct,__call,__isset,__unset
__LINE__출력할 라인 수
,__FILE__출력 파일 이름
,__DIR__,
__CLASS__출력 클래스 이름
메서드 재정의/메서드 오버로드(overload)
class Animal{
public $name;
protected $price;
function cry(){
echo "모름";}
}
클래스 Dog 확장 Animal{
//override
function cry(){
echo "puppy";}
}
class Pig 확장 Animal{
//재정의
function cry(){
echo "Little Pig";}
}
$dog1=new Dog();
$dog1->cry();
$pig=1new Pig();
$pig1->cry();
? >
재작성 정보:
상위 클래스가 모든 하위 클래스에 메소드가 있다는 것을 알고 있지만 상위 클래스가 메소드 작성 방법을 모르는 경우 하위 클래스가 이 메소드를 재정의하도록 할 수 있습니다.
재작성을 구현하려면 1. , 서브클래스의 메소드 이름은 매개변수 목록과 정확히 일치해야 하지만, 매개변수 이름은 반드시 동일할 필요는 없습니다.
2. 서브클래스에서 상위 클래스의 메소드 호출을 요구하는 경우(public) /protected), parent:: 메소드 이름(매개변수...), 상위 클래스 이름:: 메소드 이름(매개변수...)
3. 메소드 적용 범위를 구현할 때 액세스 한정자가 다를 수 있습니다. 그러나 하위 클래스의 액세스 범위>= 상위 클래스의 액세스 범위
다형성은 어디에 반영되나요?
하위 클래스가 상위 클래스의 메서드를 재정의하지 않는 경우 $call->cry()가 상위 클래스를 호출하고 하위 클래스가 상위 클래스의 메서드를 재정의합니다. 울면서( )