PHP는 동적 유형 언어로서 스크립트를 실행할 때 변수가 사전 정의 된 유형이 필요하지 않으며 함수에는 매개 변수 유형이나 반환 유형이 없을 수도 있습니다. PHP 오버로드는 런타임에 클래스의 속성 및 메소드를 동적으로 생성 또는 수정하는 것을 말합니다.
PHP는 두 가지 주요 과부하 양식을 지원합니다.
1. 속성 과부하 : 마법 메소드 __get () 및 __set ()를 사용하여 클래스의 속성에 동적으로 액세스하거나 설정할 수 있습니다.
2. 메소드 과부하 : 마법 메소드 __call () 및 __callstatic ()을 사용하여 클래스 메소드를 동적으로 호출 할 수 있습니다.
존재하지 않는 속성에 액세스 할 때 __get () 메소드가 호출됩니다. 이 마법 방법을 통해 속성을 동적으로 추가 할 수 있습니다.
class Test {
private $data = [
'name' => 'Tom',
'age' => 18
];
public function __get($name) {
if (isset($this->data[$name])) {
return $this->data[$name];
}
return null;
}
}
$test = new Test();
echo $test->name; // 산출 Tom
echo $test->age; // 산출 18
echo $test->gender; // 산출 null
__get () 메소드는 매개 변수 $ 이름 , 즉 속성 이름을 허용합니다. 속성이 존재하지 않으면 NULL이 반환됩니다.
존재하지 않는 속성에 값을 할당하면 __set () 메소드가 트리거됩니다. 이 마법 방법을 통해 속성과 그 값을 동적으로 추가 할 수 있습니다.
class Test {
private $data = [];
public function __set($name, $value) {
$this->data[$name] = $value;
}
}
$test = new Test();
$test->name = 'Tom';
echo $test->name; // 산출 Tom
__set () 메소드는 두 개의 매개 변수를 허용합니다 : $ name (속성 이름)과 $ 값 (속성 값).
존재하지 않는 메소드가 호출되면 __call () 메소드가 호출됩니다. 이 마법 방법을 사용하면 방법을 동적으로 추가 할 수 있습니다.
class Test {
public function __call($name, $arguments) {
if ($name == 'add') {
return array_sum($arguments);
}
return null;
}
}
$test = new Test();
echo $test->add(1, 2, 3); // 산출 6
echo $test->subtract(10, 2); // 산출 null
__call () 메소드는 두 개의 매개 변수를 허용합니다 : $ name (method name)과 $ arguments (메소드 매개 변수). 메소드가 존재하지 않으면 NULL이 반환됩니다.
존재하지 않는 정적 메소드를 호출하면 __callstatic () 메소드가 호출됩니다. 이 방법은 정적 메소드에서 사용된다는 점을 제외하고 __call () 메소드와 유사합니다.
class Test {
public static function __callStatic($name, $arguments) {
if ($name == 'add') {
return array_sum($arguments);
}
return null;
}
}
echo Test::add(1, 2, 3); // 산출 6
echo Test::subtract(10, 2); // 산출 null
__callstatic () 메소드는 __call () 메소드와 유사하지만 정적 메소드에만 적용됩니다.