PHP에서는 PHP가 데이터 유형이 약하고 서명을 잘 구별 할 수 없기 때문에 PHP에서는 동일한 메소드 이름과 다른 서명이있는 메소드에 따라 메소드 과부하를 직접 구현할 수 없습니다. 그러나 PHP 클래스에서 __call () 메소드를 사용하여 메소드 과부하를 구현할 수 있습니다. 클래스에 존재하지 않는 메소드가 호출되면 __call () 메소드가 자동으로 호출되는데, 이는 __call ($ name, $ arguments)의 형태 인 $ name이 메소드의 이름이고 $ argness는 배열 유형 매개 변수입니다.
다음 예제는 PHP 메소드 과부하를 사용하여 동적으로 Get and Set 메소드를 작성하는 것입니다. (객체 지향 프로그래밍에서, 클래스의 속성은 Get and Set을 사용하여 할당되지만, 30과 같은 클래스에 속성이 너무 많으면 메소드 오버로드를 사용하지 않으면 30 개의 세트 메소드를 작성하고 30 개의 GET 메소드를 천천히 작성해야합니다 ...)
코드 사본은 다음과 같습니다.
<? php
수업인
{
개인 $ 이름;
개인 $ 연령;
개인 $ 주소;
사립 학교;
개인 $ phonenum;
공개 기능 __call ($ method, $ args)
{
$ perfix = strtolower (substr ($ method, 0,3));
$ property = strtolower (substr ($ method, 3));
if (빈 ($ perfix) || 빈 ($ property))
{
반품;
}
if ($ perfix == "get"&& isset ($ this-> $ property)))
{
$ this-> $ property;
}
if ($ perfix == "set")
{
$ this-> $ property = $ args [0];
}
}
}
$ p = 새로운 사람 ();
$ p-> setName ( 'lvcy');
$ p-> 설정 (23);
$ p-> setAddress (Chengdu);
$ p-> setschool ( 'uestc');
$ p-> setphonenum ( '123456');
echo $ p-> getName (). '// n';
echo $ p-> getage (). '// n';
echo $ p-> getAddress (). '// n';
echo $ p-> getSchool (). '// n';
?>
이 문제는 각 속성에 대한 get set 메소드를 작성하지 않고 __call () 메소드에 의해 쉽게 해결됩니다.