PHP의 메소드 오버로딩
- PHP의 메소드 오버로딩
-
__call()
Magic 메서드를 사용하여 PHP에서 메서드 오버로딩 구현 -
__callStatic()
Magic 메서드를 사용하여 PHP에서 메서드 오버로딩 구현
이 기사에서는 예제와 함께 PHP에서 메소드 오버로딩의 개념을 소개합니다.
PHP의 메소드 오버로딩
메소드 오버로딩은 동일한 이름의 여러 메소드가 다른 수의 매개변수 또는 데이터 유형을 허용하는 클래스 내에 존재하는 OOP의 개념입니다. 예를 들어 add()
메소드는 두 번 정의하여 오버로드할 수 있습니다. 첫 번째는 두 개의 매개변수를 사용하고 두 번째는 세 개의 매개변수를 사용합니다.
한 메서드에서는 정수 인수를 제공하고 다른 메서드에서는 부동 소수점 인수를 제공하여 함수를 오버로드할 수도 있습니다. 이러한 유형의 오버로딩은 Java 및 C++와 같은 언어에서 널리 사용됩니다.
그러나 메소드 오버로딩의 개념은 PHP에서 상당히 다릅니다. 메소드 오버로딩은 매직 메소드의 도움으로 메소드를 동적으로 생성하는 프로세스입니다.
클래스 범위 내에 존재하지 않는 메소드를 생성할 수 있습니다. 클래스 메서드와 정적 메서드 모두에서 작동합니다.
매직 메서드 __call()
및 __callStatic()
은 동적 메서드를 오버로드하는 데 사용됩니다. 클래스 메서드는 __call()
메서드를 사용하고 정적 메서드는 callStatic()
메서드를 사용한다는 것은 이름에서 알 수 있습니다.
이러한 메서드의 구문은 아래에 나와 있습니다.
__call($name, $arguments){
//function body
}
여기서 $name
은 동적 메서드의 이름이고 $arguments
는 동적 메서드의 인수를 포함하는 배열입니다. 메서드 내에서 $arguments
배열의 인덱스를 사용하여 인수에 액세스할 수 있습니다.
__call()
Magic 메서드를 사용하여 PHP에서 메서드 오버로딩 구현
__call()
메소드를 사용하여 PHP에서 동적으로 메소드를 생성할 수 있습니다. 객체 컨텍스트에서 아직 생성되지 않은 메서드를 호출하면 메서드가 실행됩니다.
이 과정을 PHP에서는 메소드 오버로딩이라고 합니다.
예를 들어 University
클래스와 그 안에 __call()
메서드를 생성합니다. 이 방법에서 매개변수 $name
및 $arguments
의 이름을 지정합니다.
메서드 내에서 $name
변수와 $arguments
배열의 항목을 인쇄합니다. 클래스 외부에서 University
클래스의 $student
개체를 만듭니다.
다음으로 $student
객체를 사용하여 student_info()
메서드를 호출합니다. 메서드에서 001
및 Biswash
인수를 전달합니다.
예제 코드:
<?php
class University{
public function __call($name, $arguments){
echo "inside the method: ".$name."<br>";
echo "id:".$arguments[0]."<br>";
echo "name:".$arguments[1]."<br>";
}
}
$student = new University;
$student->student_info(001,'Biswash');
?>
위의 예의 흐름을 이해합시다.
매개변수와 함께 student_info()
메서드를 호출하면 프로그램이 University
클래스에서 메서드를 찾지 못합니다. 그러나 클래스에 __call()
메소드가 존재하므로 이 함수가 실행됩니다.
메서드의 $name
매개변수는 student_info()
메서드를 보유하고 $arguments
매개변수는 001
및 Biswash
인수를 Array( [0] => 1 [1] =>)로 보유합니다. 비스워시 )
. 매개변수는 __call()
메소드 내부에 인쇄됩니다.
출력:
inside the method: student_info
id:1
name:Biswash
이런 식으로 __call()
매직 메서드를 사용하여 PHP의 개체 컨텍스트에서 메서드 오버로딩을 수행할 수 있습니다.
__callStatic()
Magic 메서드를 사용하여 PHP에서 메서드 오버로딩 구현
PHP의 정적 컨텍스트에서 메소드 오버로딩 기능을 사용할 수도 있습니다. __callStatic()
매직 메서드를 사용해야 합니다.
메소드의 함수 정의는 __call
메소드의 정의와 유사합니다. 그러나 정적 컨텍스트에서 사용하므로 메서드는 정적이어야 합니다.
정적 컨텍스트이므로 클래스의 인스턴스를 만들 필요가 없습니다. 클래스에서 ::
연산자를 사용하여 동적으로 생성할 메서드를 직접 호출할 수 있습니다.
예를 들어 __call()
메서드에 대해 했던 것처럼 University
클래스 내부에 __callStatic()
메서드를 만듭니다. 메소드를 정의하는 동안 static
키워드를 작성하는 것을 잊지 마십시오.
위의 방법과 같이 메서드의 매개변수와 본문을 채웁니다. 클래스 외부에서 University::professor_info()
로 클래스의 ::
연산자를 사용하여 professor_info
메서드를 호출합니다.
메소드에서 선택한 인수를 제공하십시오.
예제 코드:
<?php
class University{
public static function __callStatic($name, $arguments){
echo "inside the method: ".$name."<br>";
echo "id:".$arguments[0]."<br>";
echo "name:".$arguments[1]."<br>";
}
}
University::professor_info(0010,'Professor Jack ');
?>
출력:
inside the method: professor_info
id:8
name:Professor Jack
이런 식으로 PHP의 __callStatic()
매직 메서드를 사용하여 정적 메서드를 오버로드할 수 있습니다.
Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.
LinkedIn