I irregulary receive the following error message ... i think generated by the DBG module of php. (It appears sometimes, after maybe some thousand executions, generated by Firefox's "reload every")
http ://www.kwicpix.de/display-i13866bpz7ln.html (plz. remove space after http)
executing the following test script and don't understand why MySecond::serialize() should be compatible with MySerializable::setUnserializedData, which are totally different functions at all. Maybe someone here has an idea?!
TIA Eutychus
 	
	| <?php 
 trait MySerializable {
 
 public function serialize() {
 return serialize($this->getSerializeData());
 }
 
 public function unserialize($serialized) {
 $this->setUnserializedData(@unserialize($serialized));
 }
 
 /**
 * This method should return a data attributes of an object ...
 *
 * @return array
 */
 abstract protected function getSerializeData();
 
 abstract protected function setUnserializedData($data);
 
 }
 
 class MyFirst implements Serializable {
 
 use MySerializable;
 
 protected $firstVar = "hello";
 protected $secondVar = "world";
 protected $thirdVar = NULL;
 
 public function __construct() {
 $this->thirdVar = new MyThird();
 }
 
 protected function getSerializeData() {
 return [
 "firstVar" => $this->firstVar,
 "secondVar" => $this->secondVar,
 "thirdVar" => $this->thirdVar,
 ];
 }
 
 protected function setUnserializedData($data) {
 $this->firstVar = $data["firstVar"];
 $this->secondVar = $data["secondVar"];
 $this->thirdVar = $data["thirdVar"];
 }
 
 }
 
 class MySecond extends MyFirst {
 
 use MySerializable;
 
 protected $extended = "ext";
 
 protected function getSerializeData() {
 return array_merge(parent::getSerializeData(), [ "extended" => $this->extended ]);
 }
 
 protected function setUnserializedData($data) {
 parent::setUnserializedData($data);
 $this->extended = $data["extended"];
 }
 
 }
 
 class MyThird implements Serializable {
 
 use MySerializable;
 
 protected $thirdsVar = "BLUE";
 protected $thirdsSecondVar = NULL;
 
 protected function getSerializeData() {
 return [
 "thirdsVar" => $this->thirdsVar,
 "thirdsSecondVar" => $this->thirdsSecondVar,
 ];
 }
 
 protected function setUnserializedData($data) {
 $this->thirdsVar = $data["thirdsVar"];
 $this->thirdsSecondVar = $data["thirdsSecondVar"];
 }
 
 }
 
 session_set_save_handler("__open", "__close", "__read", "__write", "__destroy", "__gc");
 
 function __open() {}
 
 function __close() {}
 
 function __destroy() {}
 
 function __gc() {}
 
 function __read($id) {
 return file_get_contents("test.session");
 return serialize([
 "first" => new MyFirst(),
 "second" => new MySecond(),
 ]);
 }
 
 function __write($id, $data) {
 file_put_contents("test.session", $data);
 echo $data."<br />\n";
 }
 
 session_name("ts");
 session_start();
 
 if ( empty($_SESSION) ) {
 $_SESSION["execCounter"] = 0;
 $_SESSION["first"] = new MyFirst();
 $_SESSION["second"] = new MySecond();
 }
 $_SESSION["execCounter"]++;
 
 session_write_close();
 
 ?>
 |