Disabled serializing of Singletons
authorTim Düsterhus <timwolla@arcor.de>
Mon, 7 Nov 2011 13:18:03 +0000 (14:18 +0100)
committerTim Düsterhus <timwolla@arcor.de>
Mon, 7 Nov 2011 13:25:50 +0000 (14:25 +0100)
$a = Test::getInstance();
$b = Test::getInstance();
echo 'A: '.$a->foo."\n"; // A: bar
echo 'B: '.$b->foo."\n"; // B: bar
$a->foo = 'a';
echo 'A: '.$a->foo."\n"; // A: a
echo 'B: '.$b->foo."\n"; // B: a
$b = unserialize(serialize($b)); // -> With this change SystemException
$a->foo = 'b';
echo 'A: '.$a->foo."\n"; // A: b
echo 'B: '.$b->foo."\n"; // B: a

wcfsetup/install/files/lib/system/SingletonFactory.class.php

index e182f7106e251c3b1e57416ede8c49e40de8e47f..337fd448840de9a664a5e3a2c535c4c37017d331 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 namespace wcf\system;
+use wcf\system\exception\SystemException;
 
 /**
  * Basis class for singleton classes.
@@ -36,6 +37,14 @@ abstract class SingletonFactory {
         */
        protected final function __clone() { }
        
+       /**
+        * Object serializing is disallowed.
+        */
+       public final function __sleep() {
+               throw new SystemException('Serializing of Singletons is not allowed');
+               // Turret: I'm different
+       }
+       
        /**
         * Returns an unique instance of current child class.
         *