PHP魔法方法の_sleep()メソッドと_wakeup()メソッド

5004 ワード

  • public array __sleep ( void )
  • void __wakeup ( void )

  • serialize()関数はマジックメソッドが存在するかどうかをチェックします
    __sleep() .存在する場合sleep()メソッドは、シーケンス化操作を実行する前に呼び出されます.この機能は、オブジェクトをクリーンアップし、シーケンス化すべきすべての変数名を含む配列を返すために使用できます.メソッドが何も返さない場合は、NULLはシーケンス化され、1つのE_NOTICEエラー.
    __sleep()親のプライベート属性を返すことはできません.これにより、E_が生成されます.NOTICEのエラー
    __sleep()メソッドは、コミットされていないデータまたは同様のクリーンアップ操作をコミットするためによく使用される.また、大きなオブジェクトがあれば、すべて保存する必要がなく、この機能は使いやすいです.反対に、
    unserialize()は、1つが存在するかどうかを確認します.
    __wakeup()メソッド.存在する場合は、先に呼び出されます.
    __wakeupメソッドは、オブジェクトに必要なリソースを事前に準備します.
    __wakeup()は、データベース接続を再確立したり、他の初期化操作を実行したりするなど、逆シーケンス化操作でよく使用されます.コード例:
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <?php
    class Connection
    {
    	protected $link;
    	private $server, $username, $password, $db;
    
    	public function __construct($server, $username, $password, $db)
    	{
    		$this->server = $server;
    		$this->username = $username;
    		$this->password = $password;
    		$this->db = $db;
    		$this->connect();
    	}
    
    	private function connect()
    	{
    		print "function connect().<br>";
    		$this->link = mysql_connect($this->server, $this->username, $this->password);
    		mysql_select_db($this->db, $this->link);
    	}
    	/** * * serialize()                 __sleep(). *     ,__sleep()       ,           。 *             ,                         。 *             , NULL    ,      E_NOTICE  。 */
    	public function __sleep()
    	{
    		print "Magic methods__sleep().<br>";
    		return array('server', 'username', 'password', 'db');
    	}
    
    	/** * unserialize()         __wakeup()  。 *     ,      __wakeup  ,            *   :    “       ”,             *        __wakeup      ,__wakeup              */
    	public function __wakeup()
    	{
    		print "in methods wakeup before connect, ".$this->server."<br>";
    		print "Magic methods__wakeup().<br>";
    		$this->connect();
    		print "in methods wakeup after connect, ".$this->server."<br>";
    	}
    }
    
    //       ,      ,      
    /*$conn = new Connection('127.0.0.1', 'root', 'root', 'text'); $ss = serialize($conn); $file = fopen('obj.txt', 'w'); fwrite($file,$ss); */
    $file = fopen('obj.txt', 'r');
    $ss = fread($file, filesize('obj.txt'));
    $conn = unserialize($ss);
    
    ?>

    第1セグメント(シーケンス化)の実行結果:
    function connect(). Magic methods__sleep().
    同時に、obj.txtには、シーケンス化されたオブジェクト文字列の2番目のセグメント(逆シーケンス化された)が解雇されます.
    in methods wakeup before connect, 127.0.0.1 Magic methods__wakeup(). function connect(). in methods wakeup after connect, 127.0.0.1
    まとめ:魔法の方法は、オペレータのリロードと同様に、ある時点で自動的に呼び出される関数であり、ここでsleepはシーケンス化の前に発生し、wakeは逆シーケンス化の前に発生する.PHPの他の魔法の方法:_destruct()このメソッドは、オブジェクトまたはオブジェクトの削除操作が終了したときに呼び出されます.get()は、存在しない属性を読もうとしたときに呼び出される_set()は、存在しない属性に値を書こうとすると呼び出される_call()オブジェクトが存在しないメソッドを呼び出そうとしたときに呼び出されます.toString()オブジェクトを印刷するときに呼び出されます_clone()オブジェクトがクローンされたときに呼び出されます_sleep()オブジェクトがシリアル化されたときに呼び出されます_wakeup()オブジェクトが逆シリアル化されたときに呼び出されます_invoke()は、コードがオブジェクトを関数として使用しようとしたときに呼び出されます.Autoload()簡単に言えばクラスの自動ロード_LINE__ファイル内の現在の行番号_FILE__ファイルのフルパスとファイル名_DIR__ファイルが存在するディレクトリ_FUNCTION__関数名_CLASS__クラスの名前_METHOD__クラスのメソッド名_NAMESPACE__現在の名前空間の名前