カテゴリー:
関数
閲覧数:580 配信日:2018-03-09 08:37
__sleep()
__sleep()メソッド(を定義している場合)
・オブジェクトが「serialize()」関数によってシリアル化されようとした時、シリアル化する前にコールされる
・このメソッドは、“シリアル化させたいプロパティ名を格納した配列を返す”必要がある
・返された配列に格納された名前のプロパティのみシリアル化される
・なお、このメソッドが存在しない場合は全てのプロパティがシリアル化される
__sleep ()メソッド
呼び出される具体例
Noticeが発生する例
class C{
public function __sleep(){
$pAry = array('a','b','c','d');
return $pAry;
}
}
$obj = new C;
var_dump(serialize($obj));
PHP Notice: serialize(): "a" returned as member variable from __sleep() but does not exist in /workspace/Main.php on line 10
PHP Notice: serialize(): "b" returned as member variable from __sleep() but does not exist in /workspace/Main.php on line 10
PHP Notice: serialize(): "c" returned as member variable from __sleep() but does not exist in /workspace/Main.php on line 10
PHP Notice: serialize(): "d" returned as member variable from __sleep() but does not exist in /workspace/Main.php on line 10
string(52) "O:1:"C":4:{s:1:"a";N;s:1:"b";N;s:1:"c";N;s:1:"d";N;}"
PHP Notice: serialize(): "b" returned as member variable from __sleep() but does not exist in /workspace/Main.php on line 10
PHP Notice: serialize(): "c" returned as member variable from __sleep() but does not exist in /workspace/Main.php on line 10
PHP Notice: serialize(): "d" returned as member variable from __sleep() but does not exist in /workspace/Main.php on line 10
string(52) "O:1:"C":4:{s:1:"a";N;s:1:"b";N;s:1:"c";N;s:1:"d";N;}"
メンバ変数を格納した配列を返すよう修正した例
class C{
private $server, $username, $password, $db;
public function __sleep(){
$pAry = array('server', 'username', 'password', 'db');
return $pAry;
}
}
$obj = new C;
var_dump(serialize($obj));
string(86) "O:1:"C":4:{s:9:"Cserver";N;s:11:"Cusername";N;s:11:"Cpassword";N;s:5:"Cdb";N;}"