메서드 오버로딩은 복합 응용 프로그램을 쉽게 구축하는 데 도움이 되는 객체 지향 프로그래밍의 개념입니다. 함수 오버로딩 또는 메소드 오버로딩은 인수로 받아들이는 입력 매개변수의 유형에서 서로 다르게 작동하는 유사한 이름을 가진 여러 메소드를 만들 수 있도록 하는 기능입니다.
위의 개념은 다른 프로그래밍 언어에 적합하며 정적 다형성(메소드 오버로딩)이라고 합니다.
예시
예를 들어 이해합시다.
<?php
class machine {
function doTask($var1){
return $var1;
}
function doTask($var1,$var2){
return $var1 * $var1 ;
}
}
$task1 = new machine();
$task1->doTask(5,10);
?> 출력:
Error
설명:
PHP는 이 메소드를 두 번 선언했다고 말하므로 오류가 발생합니다.
그러나 다른 프로그래밍 언어에서는 doTask($var1) 및 doTask($var1,$var2) 가 오버로드된 메서드라고 말합니다. 후자를 호출하려면 두 개의 매개변수가 전달되어야 하지만 전자는 하나의 매개변수만 필요합니다.
따라서 이 동작, 즉 코딩 시 함수를 호출하기로 결정하는 것을 정적 다형성(메소드 오버로딩)이라고 합니다.
PHP5와 관련된 메소드 오버로딩을 달성하는 방법에 대해 논의합시다. PHP의 경우 메소드 오버로딩을 달성하기 위해 PHP의 매직 메소드 __call()을 사용해야 합니다.
PHP에서 오버로딩은 메소드의 동작이 입력 매개변수에 따라 동적으로 변경됨을 의미합니다. 이 튜토리얼에서는 이러한 인식을 이해할 것입니다. __call() 메서드에 대해 논의해 보겠습니다.
__call():
클래스가 __call()을 실행하면 해당 클래스의 객체가 존재하지 않는 메서드로 호출되면 해당 메서드 대신 __call()이 호출됩니다.
예시
예제를 통해 메소드 오버로딩을 이해합시다.
<?php
class Shape {
const PI = 3.142 ;
function __call($name,$arg){
if($name == 'area')
switch(count($arg)){
case 0 : return 0 ;
case 1 : return self::PI * $arg[0] ;
case 2 : return $arg[0] * $arg[1];
}
}
}
$circle = new Shape();
echo $circle->area(3);
$rect = new Shape();
echo $rect->area(8,6);
?> 출력:
9.426 48
설명:
여기서 area() 메소드는 dynamically 생성되고 매직 메소드 __call()의 도움으로 실행되며 매개변수를 객체로 전달함에 따라 동작이 변경됩니다.