가희의자기개발블로그
php 매직 메소드 본문
요즘 프랑스어를 공부할 시간이 없어서 최대한 document들을 불어로 찾아서 보려고 노력중이다. Closure에 대해 공부하던 중 Méthodes magiques 라는 단어가 나와서.. 당황했다.. 찾아보니 php에서 매직 메서드(방법?) 그리고 매직 상수라는 개념을 제공하는것 같다.
1. Magic Methodes (매직 메서드) 란?
이 매직 메소드들은 php에서 특수한 기능을 위해 미리 정의해 놓은 메소드이다.
이러한 매직 메소드는 메소드 이름과 매개변수, 반환 타입, 호출의 타이밍만이 정해져 있으며, 그 내용은 사용자가 직접 작성하여 사용할 수 있다.
PHP에서 모든 매직 메소드의 이름은 두 개의 언더스코어(__)로 시작한다.
2. Magic Methodes 종류
__get (), __set (), __isset () 및 __unset () 등이 있다.
하나씩 살펴보자
2.1 __get()
해당 메서드는 접근불가 프로퍼티의 값을 읽을때 호출된다.
$animal = new Animal();
$height = $animal->height;
위와 같이 클래스에서 특정 필드를 검색하려고 할때마다 __get($name) 메서드를 호출한다. 이 경우 $name 은 "height" 와 같다.
* 접근불가 프로퍼티(inaccessible property)란 현재 영역에서는 정의되어 있지 않거나, 접근 제어로 인해 보이지 않는 프로퍼티를 의미한다.
2.2 __set()
메소드는 접근 불가 프로퍼티의 값을 설정할 때 호출된다.
$animal->height = 10;
$name 이 "height" 이고 $value 가 10 마법 메서드 __set($name, $value) 호출된다.
2.3 __isset()
메소드는 접근 불가 프로퍼티에 대해 isset() 함수나 empty() 함수가 호출될 때 호출한다.
아래 메서드를 호출하면 __isset($name) 함수를 호출한다.
isset($animal->height);
2.4 __unset($name)
unset($animal->height);
2.5 __construct(), __destruct()
__construct() 는 초기화 될 때 클래스를 설정하는 데 사용되므로 PHP에서 가장 일반적인 방법이다. __construct() 메서드의 반대는 __destruct() 메서드이다. 이 메서드는 작성한 객체에 대한 참조가 없거나 강제로 삭제할 때 호출된다. PHP의 가비지 컬렉션은 먼저 소멸자를 호출 한 다음 메모리에서 제거하여 객체를 정리한다.
2.6 __toString()
객체가 문자열로 처리 될 때마다 __toString() 메서드가 호출된다. 이 메소드는 클래스의 문자열 표현을 리턴해야한다.
2.7 __invoke()
이 마법 메서드는 사용자가 객체를 함수로 호출하려고 할 때 호출된다. 가능한 유스 케이스에는 함수형 프로그래밍이나 콜백과 같은 접근법이 포함될 수 있다.
class Invokable
{
/**
* 아래 메서드는 해당 객체가 함수로서 실행될때 호출된다.
* $invokable();
*/
public function __invoke($arg, $arg, ...)
{
print_r(func_get_args());
}
}
// 예시:
$invokable = new Invokable();
$invokable([1, 2, 3]);
// optputs:
Array
(
[0] => 1
[1] => 2
[2] => 3
)
2.8 __call(), _callStatic()
__call() 및 __callStatic() 은 객체 또는 정적 컨텍스트에서 존재하지 않는 객체 메서드를 호출 할 때 호출된다.
'프로그래밍 언어 > php' 카테고리의 다른 글
PHP Closure (0) | 2020.11.21 |
---|