ホームページ >バックエンド開発 >PHPの問題 >PHPクラスの魔法のメソッドとは何ですか

PHPクラスの魔法のメソッドとは何ですか

藏色散人
藏色散人オリジナル
2020-11-26 09:16:488858ブラウズ

PHP クラスのマジック メソッドは次のとおりです: 1. シリアル化する必要があるオブジェクト内のすべての変数の名前を含む配列を返す「__sleep」メソッド; 2. 「__wakeup」メソッド。 「__sleep」の反対; 3. 、「__tostring」メソッドは、クラスを文字列として扱った場合などに出力される内容を返します。

PHPクラスの魔法のメソッドとは何ですか

このチュートリアルの動作環境: Windows 7 システム、PHP バージョン 5.6。この方法は、すべてのブランドのコンピューターに適しています。

おすすめ: 「PHP ビデオ チュートリアル

PHP クラスのマジック メソッド

PHP はすべて二重アンダースコアで始まります(__ ) はマジック メソッドとして予約されているため、クラス メソッドを定義する場合は、次のマジック メソッドを除き、__ で始まらないことをお勧めします。

#sleep: シリアル化する必要があるオブジェクト内のすべての変数の名前を含む配列を返します。 Serialize 関数がクラスをシリアル化するとき、まずクラスに __sleep メソッドが存在するかどうかを確認します。存在する場合、このメソッドはシリアル化の前に呼び出されます。また、__sleep によって返される配列内のプロパティのみがシリアル化されます。 __sleep が何も返さない場合、null がシリアル化され、E_NOTICE レベルのエラーが生成されます。 __sleep は親クラスのプライベート メンバーを返すことができません。返さないと、E_NOTICE レベルのエラーが発生します。このメソッドは、オブジェクトが大きいものの、すべてのデータを保持する必要がない場合に便利です。

__wakeup: __sleep とは対照的に、unserialize 関数が逆シリアル化する場合、クラスに __wakeup メソッドが存在するかどうかが最初にチェックされます。存在する場合は、最初にメソッドが呼び出され、次に逆シリアル化操作が実行されます。 。逆シリアル化またはその他の初期化操作の前に、一部のオブジェクトに必要なリソースを準備するために使用されます。

__tostring: クラスが文字列として扱われる場合に出力される内容を返します。このメソッドは文字列を返す必要があり、このメソッドで例外をスローすることはできません。そうでない場合は、致命的なエラーが発生します。 PHP5.2以前では、このメソッドはechoとprintを直接使用した場合のみ有効でしたが、それ以降はどの文字列環境でも有効となり、__toStringメソッドを定義していないオブジェクトを文字列に変換すると致命的なエラーが発生します。起こる。

__invoke: PHP 5.3 以降、オブジェクトを関数として呼び出そうとすると、このメソッドが呼び出されます。

__set_state: PHP5.1 以降、この静的メソッドは、クラスをエクスポートするために var_export 関数が呼び出されるときに呼び出されます。このメソッドにはパラメーターが 1 つだけあり、キーとして属性、値として属性値を含む配列です。このメソッドを使用して、どのメンバーをエクスポートできるかを制御できます。

__debugInfo: PHP5.6 以降、オブジェクトの属性を出力するために var_dump 関数が呼び出されるときに、このメソッドが呼び出されます。このメソッドは、どの属性を出力できるかを制御するために使用できます。このメソッドが定義されていない場合、オブジェクト内のすべての属性が出力されます。パブリック、プロテクト、およびプライベートの属性はすべて出力されます。印刷可能なプロパティを含む配列を返します。

__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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。