__sleep() は、オブジェクトがシリアル化されるときに呼び出される PHP の特別なマジック関数です。オブジェクトを文字列にシリアル化してファイルに保存するか、他のシステムに渡す必要がある場合、PHP は自動的に __sleep() 関数を呼び出します。この記事では、__sleep() 関数の使用法とメカニズムについて詳しく説明します。
__sleep() 関数の原理
PHP がオブジェクトを文字列にシリアル化する必要がある場合、まず __sleep() 関数がオブジェクトに定義されているかどうかを確認します。の場合、PHP は最初に __sleep() 関数を呼び出してその中で操作を実行し、次にシリアル化操作を実行します。 __sleep() 関数の戻り値は、シリアル化する必要がある属性の名前を含む配列である必要があります。
たとえば、名前と年齢の 2 つの属性を含む Person オブジェクトを定義します。コードは次のとおりです:
class Person { public $name; public $age; public function __construct($name, $age) { $this->name = $name; $this->age = $age; } public function __sleep() { return array('name', 'age'); } } $person = new Person('张三', 20); $str = serialize($person); var_dump($str);
上記のコードでは、__sleep() 関数を書き換えます。指定 名前と年齢という 2 つの属性をシリアル化する必要があります。 Serialize() 関数を呼び出して $person オブジェクトを文字列にシリアル化すると、PHP は自動的に __sleep() 関数を呼び出し、名前と年齢を含む配列を返します。
#__sleep() 関数の注意事項class User { public $name; public $password; public function __construct($name, $password) { $this->name = $name; $this->password = $password; } public function __sleep() { return array('name'); } } $user = new User('张三', '123456'); $str = serialize($user); var_dump($str);上記のコードでは、パスワード属性を除外しており、ファイルにシリアル化されたり、他のシステムに渡されたりすることはありません。 概要PHP の __sleep() 関数は、オブジェクトがシリアル化されるときにシリアル化する必要がある属性を制御し、オブジェクトのセキュリティを保護できる非常に便利なマジック関数です。機密データ、またはシリアル化パフォーマンスの向上。 __sleep() 関数を使用する場合、戻り値はシリアル化する必要がある属性を含む配列でなければならないことに注意する必要があります。そうでない場合、シリアル化操作は失敗します。 __sleep() 関数がオブジェクトで定義されているが、__wakeup() 関数が定義されていない場合、オブジェクトのすべての属性は逆シリアル化中にクリアされるため、必要に応じて定義する必要があります。
以上がPHP マジック関数の探索: __sleep()の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。