0

以下のコードをご覧ください。

class Connection
{
    protected $link;
    private $server, $username, $password, $db, $cnt;

    public function __construct($server, $username, $password, $db)
    {
        $this->server = $server;
        $this->username = $username;
        $this->password = $password;
        $this->db = $db;
        $this->cnt = 1;
        $this->connect();
    }

    public function connect()
    {
        echo '<br /> in connect '.($this->cnt++);
        $this->link = mysql_connect($this->server, $this->username, $this->password);
        mysql_select_db($this->db, $this->link);
    }

    public function __sleep()
    {
        echo '<br />in sleep';
        return array('server', 'username', 'password', 'db');
    }

    public function __wakeup()
    {
        echo '<br /> in wake up';
        $this->connect();
    }
}
$obj = new Connection('server', 'test', 'test', 'test');
$s = serialize($obj);
$obj->connect();
unserialize($s);

私が間違っていなければ、Serialize はクラスの他のすべてのメンバーを破棄する必要があります。

 $s = serialize($obj);
    $obj->connect();
    unserialize($s);

'server'、'username'、'password'、'db' のプロパティをシリアライズした後、'cnt' を破棄する必要があります。しかし、$obj->connect(); を呼び出すと、それは私に $this->cnt 値を与えます ....

説明してください

4

1 に答える 1

0

serialize() は、リソース タイプを除くすべてのタイプを処理します。したがって、mysql_connect から返されたリソースはシリアル化されません。

于 2012-06-17T06:26:59.733 に答える