ID: 27724
Comment by: kase at gmx dot net
Reported By: leonel at nied dot unicamp dot br
Status: Open
Bug Type: Class/Object related
Operating System: Fedora Core1
PHP Version: 5.0.0RC1
New Comment:
Works well using this code:
kasedebian:/var/www# cat test.php5
<?php
class IntegerFactory {
private static $int = NULL;
function __construct() {}
public function getInstance() {
if ( !isset(IntegerFactory::$int) ) {
echo 'null !', "\n"; IntegerFactory::$int = new
IntegerFactory;
}
return IntegerFactory::$int;
}
}
$tmp1 = new IntegerFactory;
$d1 = $tmp1->getInstance();
var_dump($d1);
$tmp2 = new IntegerFactory;
$d2 = $tmp2->getInstance();
var_dump($d2);
$d3 = $tmp1->getInstance();
var_dump($d3);
?>
Previous Comments:
------------------------------------------------------------------------
[2004-03-26 15:21:46] leonel at nied dot unicamp dot br
Funny enough, I remember now that I got this code from an article from
Andy Gutsman himself:
http://www.zend.com/php5/andi-book-excerpt.php (see 10.static members)
------------------------------------------------------------------------
[2004-03-26 15:20:13] leonel at nied dot unicamp dot br
Description:
------------
I tried to implement a class with the Singleton pattern. However,
static variables do not seem to tie to the class, but rather to the
instance of the class.
Looking at bug 16245
http://bugs.php.net/bug.php?id=16245&edit=2
I see that Mr. Flying and I have sort of 'exchanged' bugs. He got the
result I expected and I got the result he expected.
Notice 2 things: first, he assigned a primitive type to his variable,
whereas my variable holds an object; second, his variable is declared
inside the function, and mine is declared inside the class.
Reproduce code:
---------------
<?php
class IntegerFactory {
private static $int = NULL;
function __construct() {}
public function getInstance() {
if ( !isset($this->int) ) {
echo 'null !', "\n"; $this->int = new IntegerFactory;
}
return $this->int;
}
}
$tmp1 = new IntegerFactory;
$d1 = $tmp1->getInstance();
var_dump($d1);
$tmp2 = new IntegerFactory;
$d2 = $tmp2->getInstance();
var_dump($d2);
$d3 = $tmp1->getInstance();
var_dump($d3);
?>
Expected result:
----------------
null !
object(IntegerFactory)#2 (0) {
}
object(IntegerFactory)#2 (0) {
}
object(IntegerFactory)#2 (0) {
}
Actual result:
--------------
null !
object(IntegerFactory)#2 (0) {
}
null !
object(IntegerFactory)#4 (0) {
}
object(IntegerFactory)#2 (0) {
}
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=27724&edit=1