ホームページ  >  記事  >  バックエンド開発  >  php __sleep メソッドとはどういう意味ですか?

php __sleep メソッドとはどういう意味ですか?

青灯夜游
青灯夜游オリジナル
2021-02-24 16:40:513719ブラウズ

PHP では、「__sleep()」はマジック メソッドです。serialize() を実行すると、このメソッドが最初に呼び出されます。このメソッドを使用して、オブジェクトをクリーンアップし、すべてのオブジェクトを含むオブジェクトを返すことができます。変数名の配列。 「__sleep()」メソッドは、コミットされていないデータや同様のクリーンアップ操作を送信するためによく使用されます。

php __sleep メソッドとはどういう意味ですか?

このチュートリアルの動作環境: Windows7 システム、PHP8 バージョン、DELL G3 コンピューター

sleep() PHP 詳しいメソッド説明

__sleep()、serialize()実行時、この関数が最初に呼び出されます

serialize()関数がチェックしますマジックメソッド __sleep() があるかどうか。存在する場合は、このメソッドが最初に呼び出され、次にシリアル化操作が実行されます。

この関数を使用すると、オブジェクトをクリーンアップし、シリアル化する必要があるオブジェクト内のすべての変数の名前を含む配列を返すことができます。

メソッドが何も返さない場合、NULL がシリアル化され、E_NOTICE レベルのエラーが生成されます。

注:

__sleep() は、親クラスのプライベート メンバーの名前を返すことはできません。そうすると、E_NOTICE レベルのエラーが発生します。代わりに Serializable インターフェイスを使用できます。

関数:

__sleep() メソッドは、コミットされていないデータや同様のクリーニング操作を送信するためによく使用されます。同時に、この機能は、大きなオブジェクトがいくつかあるものの、すべてを保存する必要がない場合に便利です。

詳細については、次のコードを参照してください:

<?php
class Person
{
    public $sex;
    public $name;
    public $age;
    public function __construct($name="",  $age=25, $sex=&#39;男&#39;)
    {
        $this->name = $name;
        $this->age  = $age;
        $this->sex  = $sex;
    }
    /**
     * @return array
     */
    public function __sleep() {
        echo "当在类外部使用serialize()时会调用这里的__sleep()方法<br>";
        $this->name = base64_encode($this->name);
        return array(&#39;name&#39;, &#39;age&#39;); // 这里必须返回一个数值,里边的元素表示返回的属性名称
    }
}
$person = new Person(&#39;小明&#39;); // 初始赋值
echo serialize($person);
echo &#39;<br/>&#39;;

コードの実行結果:

当在类外部使用serialize()时会调用这里的__sleep()方法
O:6:"Person":2:{s:4:"name";s:8:"5bCP5piO";s:3:"age";i:25;}
拡張知識:

マジック メソッド

PHP デシリアライゼーションを悪用する場合、多くの場合、デシリアライゼーションでマジック メソッドを使用して、悪用対象のメソッドに機密性の高い操作が存在するかどうかを確認する必要があります。

PHP は、__ (アンダースコア 2 つ) で始まるすべてのクラス メソッドをマジック メソッドとして予約します。

一般的なマジック メソッド

__construct()//オブジェクトの作成時にトリガーされます

__destruct() //オブジェクトが破棄されたときにトリガーされます

__call() //アクセスできないメソッドがオブジェクト コンテキストで呼び出されたときにトリガーされます

__callStatic() //アクセスできないメソッドが静的コンテキストで呼び出されたときにトリガーされます

__get () // アクセスできないプロパティからデータを読み取るために使用されます

__set() // アクセスできないプロパティにデータを書き込むために使用されます

__isset() // アクセスできないプロパティに対して isset() またはempty()

__unset() // アクセスできないプロパティに対して unset() が使用されたときにトリガーされます

__invoke() // スクリプトがオブジェクトを呼び出そうとしたときにトリガーされます when function

__sleep() //この関数を使用すると、オブジェクトをクリーンアップし、シリアル化する必要があるオブジェクト内のすべての変数の名前を含む配列を返すことができます。

__wakeup() //データベース接続の再確立や他の初期化操作の実行など、逆シリアル化操作でよく使用されます。

#php マジック メソッドの公式ドキュメント: https://www.php.net/manual/zh/ language.oop5.magic.php

[推奨される学習: 「PHP ビデオ チュートリアル 」]

以上がphp __sleep メソッドとはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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