update : 2015.11.03
php.shukuma.com검색:
|
특수 메서드다음 함수들은 __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() and __debugInfo() PHP 클래스에서는 특별합니다. 이 함수들과 관련된 특별한 사용외에 클래스에서는 해당 함수명을 사용하지 않아야 합니다. Caution
PHP에서는 모든 특수함수명이 __ 로 시작합니다. 문서화된 특수기능을 위한게 아니라면 함수명을 __ 로 시작하지 않을것을 권장합니다. __sleep() and __wakeup()
public array __sleep
( void
)
void __wakeup
( void
)
serialize()는 클래스가 __sleep() 특수함수를 가지는지 확인합니다.
만약에 그렇다면, 직렬화 이전에 실행됩니다. 또한 객체에서 직렬화 가능한 모든 변수들의 배열을 반환할 수 있음을 전제로 객체를 제거할수 있습니다.
만약에 메서드가 다른 어떤것도 리턴하지 않으면,
__sleep() 의 의도된 사용은 데이터를 커밋하거나 비슷한 정리 작업을 수행하는 것입니다. 또한, 이 함수는 매우 큰 객체를 완전히 저장할 필요가 없을 경우에 유용합니다. 반대로, unserialize() 는 클래스가 __wakeup() 특수함수를 가지는지 확인합니다. 만약에 그렇다면, 원래의 객체가 가졌던 리소스들을 재건할수 있습니다. __wakeup()의 의도된 사용은 직렬화 과정에서 끊어진 데이터베이스 커넥션을 재연결하고, 다른 재초기화 작업을 수행하는것입니다. Example #1 Sleep 과 wakeup
<?php __toString()
public string __toString
( void
)
__toString() 메서드는 클래스가 문자열로 변환될때의 동작을 결정하도록 해줍니다.
예를 들면, echo $obj; 가 출력할 결과를 보면 됩니다. 메서드는 문자열을 리턴해야 합니다. 그렇지 않을경우
Warning
__toString() 메서드 내에서는 예외를 발생할 수 없습니다. 그럴경우에는 치명적인 에러가 발생합니다. Example #2 간단한 예제
<?php 위 예제의 출력: Hello
주의할 점은 PHP 5.2.0 이전에는 __toString() 메서드가 오직
echo 와 print 에만 연결되어 있다는 것입니다.
PHP 5.2.0 이후로는, 어떤 문자열 컨텍스트라도 호출할 수 있습니다(예를 들면
printf() 의 %s 와 같은) 그러나 다른 타입의 컨텍스트에는 호출되지 않습니다.
(예를 들어 %d 와 같은).
PHP 5.2.0 이후로는, __toString()이 없는 객체의 문자열로의 변환은
__invoke()__invoke() 메서드는 스크립트가 객체를 함수로 호출했을때 호출합니다.
Example #3 Using __invoke()
<?php 위 예제의 출력: int(5) bool(true) __set_state()
static object __set_state
( array
$properties
)static 메서드는 PHP 5.1.0 이후부터 var_export() 에 의해 내보내진 클래스를 위해 호출됩니다. 이 메서드의 유일한 파라미터는 내보내진 속성을 가진 특정형식(array('property' => value, ...))의 배열입니다. Example #4 __set_state() 의 사용 (PHP 5.1.0 이후)
<?php 위 예제의 출력: object(A)#2 (2) { ["var1"]=> int(5) ["var2"]=> string(3) "foo" } __debugInfo()
array __debugInfo
( void
)
이 메서드는 var_dump()에 의해 덤프될때 보여줄 속성을 가져올때 호출됩니다. 만약에 객체에 해당 메서드가 정의되어 있지 않을경우, 모든 public, protected, private 속성을 보여주게 됩니다. 이 기능은 PHP 5.6.0 에서 추가되었습니다. Example #5 Using __debugInfo()
<?php 위 예제의 출력: object(C)#1 (1) { ["propSquared"]=> int(1764) } |