#30958 [Com]: Wrong instance returned with 2 singletons
| From: | rampant at gmail dot com | Date: | Thu, 16 Dec 2004 04:47:33 +0000 |
| Subject: | #30958 [Com]: Wrong instance returned with 2 singletons | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-70297@lists.php.net to get a copy of this message | ||
ID: 30958
Comment by: rampant at gmail dot com
Reported By: schaa101 at tech dot nhl dot nl
Status: Open
Bug Type: Class/Object related
Operating System: Windows XP Pro SP2
PHP Version: 5.0.2
New Comment:
If error_reporting(E_ALL) is set, you will see that instead of setting
$this in a singleton, $this is set in the Main class. Here is the
notice:
Notice: Undefined property: Main::$instance in
C:\eclipse\workspace\tmote\tmp_singles.php on line 12
Where line 12 is:
if( $this->instance == null )
Replacing $this->instance with self::$instance and
private $instance = null;
with,
private static $instance = null;
Will make the code behave as expected.
Previous Comments:
------------------------------------------------------------------------
[2004-12-02 12:16:30] schaa101 at tech dot nhl dot nl
<?php
class Singleton1
{
private $instance = null;
private function __Construct()
{ }
public function & GetInstance()
{
if( $this->instance == null )
$this->instance = new Singleton1();
return $this->instance;
}
public function Write( $message )
{
print "Singleton1 - " . $message;
}
}
class Singleton2
{
private $instance = null;
private function __Construct()
{ }
public function & GetInstance()
{
if( $this->instance == null )
$this->instance = new Singleton2();
return $this->instance;
}
public function Write( $message )
{
print "Singleton2 - " . $message;
}
}
class Main
{
public function __Construct()
{
Singleton1::GetInstance()->Write( "Singleton1" );
echo "<br/>";
Singleton2::GetInstance()->Write( "Singleton2" );
}
}
new Main();
?>
------------------------------------------------------------------------
[2004-12-02 11:10:41] derick@php.net
Please post the code here.
------------------------------------------------------------------------
[2004-12-02 11:09:30] schaa101 at tech dot nhl dot nl
Description:
------------
When you use 2 singletons, the second singeleton also returns the
instance of the first.
If you change the name of the variables, that store the instance of the
singleton class, inside the singletons and make them both unique, the
problem is solved though.
Reproduce code:
---------------
http://klaas.fiskaaf.com/singleton-bug.rar
or try
http://klaas.fiskaaf.com/singleton-bug.zip
Expected result:
----------------
Singleton1 - Singleton1
Singleton2 - Singleton2
Actual result:
--------------
Singleton1 - Singleton1
Singleton1 - Singleton2
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=30958&edit=1