Heim  >  Artikel  >  Backend-Entwicklung  >  Erkundung der magischen PHP-Funktionen: __sleep()

Erkundung der magischen PHP-Funktionen: __sleep()

WBOY
WBOYOriginal
2023-06-21 10:38:331428Durchsuche

__sleep() ist eine spezielle magische Funktion in PHP, die aufgerufen wird, wenn ein Objekt serialisiert wird. Wenn wir ein Objekt in einen String serialisieren und in einer Datei speichern oder an andere Systeme übergeben müssen, ruft PHP automatisch die Funktion __sleep() auf. Dieser Artikel befasst sich mit der Verwendung und dem Mechanismus der Funktion __sleep().

Das Prinzip der Funktion __sleep()

Wenn PHP ein Objekt in einen String serialisieren muss, prüft es zunächst, ob die Funktion __sleep() für das Objekt definiert ist. Wenn sie definiert ist, ruft PHP zuerst __sleep() auf. Funktion und führt darin Vorgänge aus, bevor Sie Serialisierungsvorgänge durchführen. Der Rückgabewert der Funktion __sleep() muss ein Array sein, das die Namen der Attribute enthält, die serialisiert werden müssen.

Zum Beispiel definieren wir ein Person-Objekt, das zwei Attribute enthält: Name und Alter. Der Code lautet wie folgt:

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);

Im obigen Code schreiben wir die Funktion __sleep() neu und geben den Namen und das Alter an, die benötigt werden serialisiert werden. Wenn wir die Funktion serialize() aufrufen, um das Objekt $person in einen String zu serialisieren, ruft PHP automatisch die Funktion __sleep() auf und gibt ein Array zurück, das Name und Alter enthält.

Hinweise zur Funktion __sleep()

  1. Die Funktion __sleep() muss ein Array zurückgeben. Wenn es sich nicht um ein Array handelt, wird eine E_NOTICE-Warnung ausgegeben und der Serialisierungsvorgang schlägt fehl. Die Funktion
  2. __sleep() kann ein leeres Array zurückgeben, was bedeutet, dass keine Attribute serialisiert werden müssen, was in manchen Szenarien nützlich sein kann.
  3. Wenn das von der Funktion __sleep() zurückgegebene Array ein undefiniertes Attribut enthält, wird eine E_NOTICE-Warnung ausgegeben und das Attribut ignoriert.
  4. Wenn die Funktion __sleep() in einem Objekt definiert ist, die Funktion __wakeup() jedoch nicht definiert ist, werden alle Attribute des Objekts während der Deserialisierung gelöscht.

Anwendungsszenarien der Funktion __sleep()

Die Funktion __sleep() kann verwendet werden, um die Attribute zu steuern, die bei der Serialisierung von Objekten serialisiert werden müssen, indem bestimmte Attribute in der Funktion __sleep() ausgeschlossen werden , oder in einigen Fällen die Serialisierungsleistung verbessern.

Zum Beispiel möchten wir in einem Benutzerobjekt mit einem Kennwort nicht, dass das Kennwortattribut in eine Datei serialisiert oder an andere Systeme übergeben wird. Wir können dieses Attribut ausschließen, indem wir __sleep() überschreiben. Funktion:

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);

Im obigen Code haben wir das Kennwortattribut ausgeschlossen, das nicht in eine Datei serialisiert oder an andere Systeme übergeben wird.

Zusammenfassung

In PHP ist die Funktion __sleep() eine sehr nützliche magische Funktion. Sie kann die Attribute steuern, die bei der Serialisierung eines Objekts serialisiert werden müssen, die Sicherheit sensibler Daten schützen oder die Serialisierungsleistung verbessern. Wenn Sie die Funktion __sleep() verwenden, müssen Sie beachten, dass der Rückgabewert ein Array sein muss, das die Attribute enthält, die serialisiert werden müssen, andernfalls schlägt der Serialisierungsvorgang fehl. Wenn die Funktion __sleep() in einem Objekt definiert ist, die Funktion __wakeup() jedoch nicht, werden alle Attribute des Objekts während der Deserialisierung gelöscht und sollten nach Bedarf definiert werden.

Das obige ist der detaillierte Inhalt vonErkundung der magischen PHP-Funktionen: __sleep(). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn