Mein Beispiel:Wie Klasse zu __sleep hinzufügen?
<?php
class PDO2 {
private $dsn, $username, $password;
public function __construct($dsn, $username, $password)
{
$this->dsn = $dsn;
$this->username = $username;
$this->password = $password;
}
}
class Connection
{
protected $link;
private $dsn, $username, $password;
public function __construct($dsn, $username, $password)
{
$this->dsn = $dsn;
$this->username = $username;
$this->password = $password;
$this->connect();
}
private function connect()
{
$this->link = new PDO2($this->dsn, $this->username, $this->password);
}
public function __wakeup()
{
$this->connect();
}
}
$c = new Connection('aaaa', 'bbb', 'ccc');
$s = serialize($c);
print_r($s);
Diese Rückkehr:
O: 10: "Connection": 4: {s: 7: "* link"; O: 4: "PDO2": 3 : {s: 9: "PDO2dsn"; s: 4: "aaaa"; s: 14: "PDO2-Benutzername"; s: 3: "bbb"; s: 14: "PDO2password"; s: 3: "ccc"; } s: 15: "Connectiondsn"; s: 4: "aaaa"; s: 20: "Verbindungsbenutzername"; s: 3: "bbb"; s: 20: "Verbindungskennwort"; s: 3: "ccc";}
Aber ich möchte hinzufügen, um __sleep magische Methode nur PDO2, Benutzername und DNS:
public function __sleep()
{
return array('dsn', 'username', 'PDO2');
}
Aber ich habe bemerkt:
Notice: serialize(): "PDO2" returned as member variable from __sleep() but does not exist in
dieses:
public function __sleep()
{
return array('dsn', 'username');
}
gut funktioniert.
Wie kann ich die Klasse PDO2 an __sleep übergeben?
Der Hinweis sagt Ihnen genau, was vor sich geht: Es gibt keine Membervariable (Eigenschaft) in der Klasse 'Connection' namens' PDO2'. Sie haben der Eigenschaft 'link' eine Instanz von' PDO2' zugewiesen, also sollte das Array, das Sie in '__sleep()' zurückgeben, 'array ('dsn', 'username', 'link')' sein. –