>백엔드 개발 >PHP 문제 >PHP 클래스의 매직 메소드는 무엇입니까?

PHP 클래스의 매직 메소드는 무엇입니까?

藏色散人
藏色散人원래의
2020-11-26 09:16:488867검색

PHP 클래스의 매직 메서드는 다음과 같습니다. 1. 직렬화해야 하는 개체의 모든 변수 이름이 포함된 배열을 반환하는 "__sleep" 메서드 2. "__sleep"의 반대인 "__wakeup" 메서드 "; 3. "__tostring" 메서드는 클래스를 문자열로 처리할 때 출력할 내용을 반환합니다.

PHP 클래스의 매직 메소드는 무엇입니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, PHP 버전 5.6 이 방법은 모든 브랜드의 컴퓨터에 적합합니다.

추천: "PHP Video Tutorial"

Magic Methods of PHP Classes

PHP는 이중 밑줄(__)로 시작하는 모든 클래스 메소드를 매직 메소드로 예약하므로 클래스 메소드를 정의할 때 다음 매직을 제외하고 방법을 사용하는 경우 __로 시작하지 않는 것이 좋습니다.

__sleep: 직렬화해야 하는 개체의 모든 변수 이름이 포함된 배열을 반환합니다. serialize 함수는 클래스를 직렬화할 때 먼저 클래스에 __sleep 메서드가 있는지 확인합니다. 존재하는 경우 이 메서드는 직렬화 전에 호출됩니다. 그리고 __sleep이 반환한 배열의 속성만 직렬화됩니다. __sleep이 아무것도 반환하지 않으면 null이 직렬화되고 E_NOTICE 수준 오류가 생성됩니다. __sleep은 상위 클래스의 전용 멤버를 반환할 수 없습니다. 그렇지 않으면 E_NOTICE 수준 오류가 발생합니다. 이 방법은 규모가 크지만 모든 데이터를 보유할 필요는 없는 개체에 유용합니다.

__wakeup: __sleep과 달리 unserialize 함수는 클래스에 __wakeup 메서드가 있는지 먼저 확인하고 존재하는 경우 해당 메서드를 먼저 호출한 다음 deserialization 작업을 수행합니다. 역직렬화 또는 기타 초기화 작업 전에 개체에 필요한 일부 리소스를 준비하는 데 사용됩니다.

__tostring: 클래스가 문자열로 처리될 때 출력될 내용을 반환합니다. 이 메서드는 문자열을 반환해야 하며 이 메서드에서 예외를 발생시킬 수 없습니다. 그렇지 않으면 치명적인 오류가 발생합니다. PHP5.2 이전에는 echo와 print를 직접 사용할 때만 이 메서드가 적용되었습니다. 이후에는 __toString 메서드를 정의하지 않은 객체를 문자열로 변환하면 치명적인 오류가 발생합니다. 발생하다.

__invoke: PHP 5.3부터 이 메서드는 객체를 함수로 호출하려고 할 때 호출됩니다.

__set_state: PHP5.1부터 클래스를 내보내기 위해 var_export 함수가 호출될 때 이 정적 메서드가 호출됩니다. 이 메소드에는 속성을 키로, 속성 값을 값으로 포함하는 배열인 매개변수가 하나만 있습니다. 이 방법을 사용하여 내보낼 수 있는 멤버를 제어할 수 있습니다.

__debugInfo: PHP 5.6부터 이 메소드는 객체의 속성을 인쇄하기 위해 var_dump 함수가 호출될 때 호출됩니다. 이 메소드는 인쇄할 수 있는 속성을 제어하는 ​​데 사용할 수 있습니다. , protected 및 Private 속성이 인쇄됩니다. 인쇄할 수 있는 속성이 포함된 배열을 반환합니다.

__construct: 생성자 함수.

__destruct: 소멸자.

__set, __get, __isset, __unset: 오버로드된 속성.

__call, __callstatic: 오버로드된 메서드.

__clone: ​​​​객체 복사.

<?php
class A{
    private $var;
    public $var2="b";
    
    function __construct(){
        $this->var=mt_rand();
    }
    
    function __sleep(){
        return array("var","var2");
    }
    
    function __wakeup(){
        $this->var=mt_rand();
    }
    
    function __toString(){
        return "class[".__CLASS__."]:{var:$this->var,var2:$this->var2}\n";
    }
    
    function __invoke($arg){
        $this->var2=$arg;
    }
    
    static function __set_state($arr){
        $a=new A();
        $a->var=$arr[&#39;var&#39;];
        return $a;
    }
}
$a=new A();
$str=serialize($a);
echo "$str\n";
$b=unserialize($str);
var_dump($b);
$b("inv-b");
echo $b;
eval(&#39;$c=&#39; . var_export($b,true) . &#39;;&#39;);
var_dump($c);
?>

더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 학습을 방문하세요! !

위 내용은 PHP 클래스의 매직 메소드는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.