메서드 오버로딩은 복합 응용 프로그램을 쉽게 구축하는 데 도움이 되는 객체 지향 프로그래밍의 개념입니다. 함수 오버로딩 또는 메소드 오버로딩은 인수로 받아들이는 입력 매개변수의 유형에서 서로 다르게 작동하는 유사한 이름을 가진 여러 메소드를 만들 수 있도록 하는 기능입니다.
위의 개념은 다른 프로그래밍 언어에 적합하며 정적 다형성(메소드 오버로딩)이라고 합니다.
예시
예를 들어 이해합시다.
<?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()의 도움으로 실행되며 매개변수를 객체로 전달함에 따라 동작이 변경됩니다.