PHP4에는 Java 및 COM과 마찬가지로 외부 객체 모델에 대한 매핑을 설정하는 오버로딩 구문이 이미 있습니다. PHP5는 프로그래머가 속성에 액세스하고 메소드를 호출하는 사용자 정의 동작을 생성할 수 있도록 하는 강력한 객체 지향 오버로딩을 제공합니다.
오버로딩은 여러 특수 메소드인 __get을 통해 수행될 수 있습니다. __set 및 __call. Zend 엔진이 멤버에 액세스하려고 시도하고 해당 멤버를 찾을 수 없으면 PHP는 이러한 메서드를 호출합니다.
그림 1의 예에서 __get 및 __set는 필요한 경우 모든 액세스를 속성 변수 배열로 대체할 수 있습니다. 예를 들어, 스크립트는 속성 값 설정을 비활성화하거나 특정 접두사로 시작하거나 특정 유형의 값을 포함할 수 있습니다.
정의되지 않은 메서드를 호출하는 경우. , 메소드 이름과 메소드가 수신한 매개변수는 __call 메소드로 전달되고, PHP는 __call 값을 정의되지 않은 메소드 <?php로 다시 전달
합니다
.
클래스 오버로더
{
개인 $properties = 배열();
함수 __get($property_name)
{
if(isset($this->속성[$property_name]))
{
return($this->속성[$property_name]);
}
또 다른
{
반환(NULL);
}
}
함수 __set($property_name, $value)
{
$this->속성[$property_name] = $value;
}
함수 __call($function_name, $args)
{
print("$function_name() 호출 중n");
print("인수: ");
print_r($args);
return(TRUE);
}
}
$o = new Overloader();
//__set() 호출은 존재하지 않는 속성 변수에 값을 할당하고 __set()를 활성화합니다.
$o->dynaProp = "동적 콘텐츠";
//__get() 호출 __get() 활성화
print($o->dynaProp . "n");
//__call() 호출 __call() 활성화
$o->dynaMethod("레온", "지브");
?>
클래스 자동 로딩
정의되지 않은 클래스를 사용하려고 하면 PHP는 치명적인 오류를 보고합니다. 해결 방법은 파일에 포함될 수 있는 클래스를 추가하는 것입니다. 그러나 PHP는 어떤 클래스를 사용해야 하는지 알고 있습니다. 프로그래밍 시간을 절약할 수 있는 클래스에 대한 자동 로딩 기능을 제공합니다. PHP가 구성하지 않은 클래스를 사용하려고 하면 전역 함수 __autoload를 찾습니다. 이 함수가 있으면 PHP는 이를 매개변수로 호출합니다. 매개변수는 클래스의 이름입니다.
예제 그림 2는 __autoload가 사용되는 방법을 보여줍니다. 이는 스크립트가 User 클래스의 인스턴스를 생성하려고 시도할 때 __autoload를 실행한다고 가정합니다. User 클래스는 class_User.php에 정의되어 있습니다. 호출이 대문자인지 소문자인지에 관계없이 PHP는 클래스
자동 로딩
<?php를
소문자로 반환합니다.
//자동 로드 기능 정의
함수 __autoload($class)
{
include("class_" . ucfirst($class) . ".php");
}
//자동 로드되어야 하는 클래스를 사용합니다.
$u = 새로운 사용자;
$u->name = "레온";
$u->인쇄이름();
?>