|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2003-01-18 09:25 UTC] moriyoshi@php.net
[2003-01-18 09:35 UTC] sniper@php.net
|
|||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Oct 29 16:00:01 2025 UTC |
I want to keep a reference on a global object in a static method. But, between calls of this static method, my reference becomes NULL ! Look at this simple self-explanatory code: ------------------------------------------------ class B { var $x=100; } class A { /*Returns an instance*/ function &getInstance(){ if( !isset($GLOBALS['foo']) ){ $GLOBALS['foo'] =& new B(); } return $GLOBALS['foo']; } } /*this function gets the instance and show information*/ function staticExecution(){ static $instance=NULL; echo "ENTER staticExecution". "<BR/>\n"; //If static variable is not initialized if( $instance === NULL ){ $instance =& A::getInstance(); echo "DEBUG: getInstance is called". "<BR/>\n";; } echo 'BEFORE INCREMENT:$instance->x=='.$instance->x."<BR/>\n"; $instance->x++; echo 'AFTER INCREMENT: $instance->x == '.$instance->x . "<BR/>\n"; echo "EXIT staticExecution". "<BR/>\n";; } //ten call to staticExecution for ($i=0; $i<10; $i++){ staticExecution(); echo "<HR/>"; } RESULTS: ------------------------------------------------ ENTER staticExecution DEBUG: getInstance is called BEFORE INCREMENT: $instance->x == 100 AFTER INCREMENT: $instance->x == 101 EXIT staticExecution ------------------------------------------------------------ENTER staticExecution DEBUG: getInstance is called BEFORE INCREMENT: $instance->x == 101 AFTER INCREMENT: $instance->x == 102 EXIT staticExecution ------------------------------------------------------------ENTER staticExecution DEBUG: getInstance is called BEFORE INCREMENT: $instance->x == 102 AFTER INCREMENT: $instance->x == 103 EXIT staticExecution ------------------------------------------------------------ENTER staticExecution DEBUG: getInstance is called BEFORE INCREMENT: $instance->x == 103 AFTER INCREMENT: $instance->x == 104 EXIT staticExecution ------------------------------------------------------------ LIKE THIS TEN TIMES; WHAT DO WE NOTICE: - the reference returned is good: x is incremented - BUT the debug message appears 10 times !!! Indeed, my static variable is reinitialized between calls