※この記事は読者によって投稿されたユーザー投稿のため、編集部の見解や意向と異なる場合があります。 また、編集部はこの内容について正確性を保証できません。
ヒューマンリソシア株式会社はコラム「マジックメソッドを巡る旅 その10」を公開しました。 まずは「継承を含む場合」の注意点です。 単純に「__sleep()が存在しない」場合は、特に何の問題もありません。 class hoge { public function __wakeup() { } public function set_i($i) { $this->i_ = $i; } public function set_j($i) { $this->j_ = $i; } // private $i_; private $j_; } class foo extends hoge{ public function set_k($i) { $this->k_ = $i; } // private $k_; } // $obj = new foo(); $obj->set_i(10); $obj->set_j(20); $obj->set_k(30); $s = serialize($obj); // $obj2 = unserialize($s); var_dump($obj2); 結果 object(foo)#2 (3) { [“k_”:”foo”:private]=> int(30) [“i_”:”hoge”:private]=> int(10) [“j_”:”hoge”:private]=> int(20) } しかし、もし__sleep()を使う場合は、プロパティを全て「protected」にする必要があります。 また、__sleep()の中を「parent::とarray_mergeを使って、親の変数配列は親の__sleep()の情報を使う」ほうが、 変更などを考えると、よりよいでしょう。 この続きは以下をご覧くださいhttp://resocia.jp/column/2112/

人気記事トップ10

人気記事ランキングをもっと見る