3

I'm a PHP newbie. Here is a standart Singleton pattern example according to phptherightway.com:

<?php
class Singleton
{
    public static function getInstance()
    {
        static $instance = null;
        if (null === $instance) {
            $instance = new static();
        }

        return $instance;
    }

    protected function __construct()
    {
    }

    private function __clone()
    {
    }

    private function __wakeup()
    {
    }
}

class SingletonChild extends Singleton
{
}

$obj = Singleton::getInstance();
var_dump($obj === Singleton::getInstance());             // bool(true)

$anotherObj = SingletonChild::getInstance();
var_dump($anotherObj === Singleton::getInstance());      // bool(false)

var_dump($anotherObj === SingletonChild::getInstance()); // bool(true)

The question is in this line:

        static $instance = null;
        if (null === $instance) {
            $instance = new static();
        }

So as i understand if (null === $instance) is always TRUE, because everytime i'm calling the method getInstance() the variable $instance is always being set to null and a new instance will be always created. So this is not really a singleton. Could you please explain me ?

misfit
  • 107
  • 7

2 Answers2

2

Look at "Example #5 Example use of static variables" here: http://php.net/manual/en/language.variables.scope.php#language.variables.scope.static

"Now, $a is initialized only in first call of function and every time the test() function is called it will print the value of $a and increment it."

martindilling
  • 2,839
  • 3
  • 16
  • 13
1

See http://php.net/manual/en/language.variables.scope.php#language.variables.scope.static

static $instance = null;

will be runned only on first function invoke

Now, $a is initialized only in first call of function

and all other time it will store created object