ホームページ  >  記事  >  バックエンド開発  >  PHP マジック関数の探索: __sleep()

PHP マジック関数の探索: __sleep()

WBOY
WBOYオリジナル
2023-06-21 10:38:331403ブラウズ

__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() 関数の注意事項

    __sleep() 関数は配列を返す必要があります。配列でない場合は、E_NOTICE 警告がスローされ、シリアル化操作は失敗します。
  1. __sleep() 関数は空の配列を返すことができます。これは、属性をシリアル化する必要がないことを意味し、一部のシナリオでは役立つ場合があります。
  2. __sleep() 関数によって返された配列に未定義の属性が含まれている場合、E_NOTICE 警告がスローされ、その属性は無視されます。
  3. オブジェクト内で __sleep() 関数が定義されているが、__wakeup() 関数が定義されていない場合、オブジェクトのすべての属性は逆シリアル化中にクリアされます。
__sleep() 関数のアプリケーション シナリオ

#__sleep() 関数は、オブジェクトのシリアル化時にシリアル化する必要がある属性を制御するために使用できます。この属性は、__sleep で除外できます。 () 関数 特定のプロパティは、場合によっては機密データを保護したり、シリアル化のパフォーマンスを向上させるために使用されます。

たとえば、パスワードを持つ User オブジェクトでは、ユーザーのプライバシーを保護するために、パスワード属性をファイルにシリアル化したり、他のシステムに渡したりしたくありません。この属性を除外します:

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

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