PHP5, objects not passed by reference?!?

php.internals

Jean-Francois Levesque

21 years ago
Hi! In PHP5, the objects are supposed to be passed by reference, right? I try to use a singleton pattern but it's not working. I just compile the lastest php version (5.0.4) and I still have the problem. My code : <?php class Example { // Hold an instance of the class private static $instance; public $testvar = 'init'; // The singleton method public static function singleton() { if (!isset(self::$instance)) { $c = __CLASS__; self::$instance = new $c; } return self::$instance; } // Prevent users to clone the instance public function __clone() { trigger_error('Clone is not allowed.', E_USER_ERROR); } } $test = Example::singleton(); $test2 = Example::singleton(); $test->testvar = 1; $test2->testvar = 2; echo $test->testvar." ; ".$test2->testvar; ?> Output : Fatal error: Clone is not allowed. in /usr/home/usagers/linux/step_html/stationnement/test.php on line 21 Phpinfo : http://step.polymtl.ca/~linux/stationnement/phpinfo.php Should I set something in the php.ini? What can I do? Thanks for your help! Jean-Francois

Antony Dovgal

21 years ago
On Thu, 02 Jun 2005 09:05:24 -0400 Jean-Francois Levesque <linux@step.polymtl.ca> wrote:
> Hi! > > In PHP5, the objects are supposed to be passed by reference, right? I > try to use a singleton pattern but it's not working. I just compile the > lastest php version (5.0.4) and I still have the problem. > > My code : > > <?php > class Example > { > // Hold an instance of the class > private static $instance; > public $testvar = 'init'; > > // The singleton method > public static function singleton() > { > if (!isset(self::$instance)) { > $c = __CLASS__; > self::$instance = new $c; > } > > return self::$instance; > } > // Prevent users to clone the instance > public function __clone() > { > trigger_error('Clone is not allowed.', E_USER_ERROR); > } > } > > $test = Example::singleton(); > $test2 = Example::singleton(); > > $test->testvar = 1; > $test2->testvar = 2; > > echo $test->testvar." ; ".$test2->testvar; > > ?> > > > Output : > > Fatal error: Clone is not allowed. in > /usr/home/usagers/linux/step_html/stationnement/test.php on line 21 > > > Phpinfo : http://step.polymtl.ca/~linux/stationnement/phpinfo.php > > Should I set something in the php.ini? What can I do?
I get "2 ; 2" and no error with latest snapshots of 5.0.5-dev and HEAD. Check if you have zend.ze1_compatibility_mode Off.
-- Wbr, Antony Dovgal aka tony2001 antony@zend.com

Jean-Francois Levesque

21 years ago
Now I have zend.ze1_compatibility_mode to off and now it's working. Thanks! Jean-François Antony Dovgal wrote: