update : 2015.11.03
php.shukuma.com검색:
|
오버로딩PHP 에서 오버로딩의 의미는 동적으로 프로퍼티나 메서드를 "생성"함을 의미합니다. 이러한 동적 엔터티들은 클래스의 매직 메서드를 통해 다양한 형태로 처리됩니다. 오버로딩 기능은 현재 스코프에서 정의되지 않거나 보이지 않는 프로퍼티나 메서드를 조작하려고 할때 호출됩니다. 이 문서에서는 "접근불가 프로퍼티" 와 "접근불가 메서드"를 위의 내용을 지칭하는데 사용하겠습니다. 모든 오버로딩 메서드는 public 으로 정의되어야 합니다.
변경점
프로퍼티 오버로딩
public bool __isset
( string
$name
)
public void __unset
( string
$name
)__set() 은 접근불가 프로퍼티에 쓰기를 할때 실행됩니다. __get() 은 접근불가 프로퍼티에서 읽기를 할때 사용합니다. __isset() 은 접근불가 프로퍼티에 대해 isset() 나 empty() 가 호출되었을때 불려집니다. __unset() 은 접근불가 프로퍼티를 unset() 했을때 호출됩니다. $name 인자는 다루고자 하는 프로퍼티 이름입니다. __set() 메서드의 $value 인자는 $name 의 값으로 세팅하고자 하는 값입니다. 프로퍼티 오버로딩은 객체 컨텍스트내에서만 동작합니다. 이 매직메서드들은 정적 컨텍스트내에서는 불려지지 않을 것입니다. 게다가 이 메서드들은 static 으로 선언할 수 없습니다. PHP 5.3.0 이후로는 매직 오버로딩 메서드가 static 으로 선언되어 있을경우 경고를 발생합니다.
Example #1 __get(), __set(), __isset() 과 __unset() 메서드로 프로퍼티 오버로딩하기
<?php 위 예제의 출력: Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in <file> on line 70 in <file> on line 29 메서드 오버로딩__call()은 오브젝트 컨텍스트내에서 접근불가 메서드를 호출할때 불려집니다. __callStatic() 은 정적 컨텍스트내에서 접근불가 메서드를 호출할때 불려집니다. $name인자는 불려질 메서드의 이름입니다. $arguments 는 $name 메서드로 전달될 파라미터 배열입니다. Example #2 __call() 과 __callStatic() 로 메서드 오버로딩하기
<?php 위 예제의 출력: Calling object method 'runTest' in object context Calling static method 'runTest' in static context |