Files
DesignPatternsPHP/Creational/Singleton/Singleton.php
Roman Martinuk 74c96851d1 singleton fix visible __wakeup()
1) DesignPatterns\Creational\Singleton\Tests\SingletonTest::testUniqueness
The magic method DesignPatterns\Creational\Singleton\Singleton::__wakeup() must have public visibility

/app/Creational/Singleton/Singleton.php:39
/app/Creational/Singleton/Tests/SingletonTest.php:12

ERRORS!
2021-03-14 20:58:23 +03:00

46 lines
1.0 KiB
PHP

<?php declare(strict_types=1);
namespace DesignPatterns\Creational\Singleton;
use Exception;
final class Singleton
{
private static ?Singleton $instance = null;
/**
* gets the instance via lazy initialization (created on first usage)
*/
public static function getInstance(): Singleton
{
if (static::$instance === null) {
static::$instance = new static();
}
return static::$instance;
}
/**
* is not allowed to call from outside to prevent from creating multiple instances,
* to use the singleton, you have to obtain the instance from Singleton::getInstance() instead
*/
private function __construct()
{
}
/**
* prevent the instance from being cloned (which would create a second instance of it)
*/
private function __clone()
{
}
/**
* prevent from being unserialized (which would create a second instance of it)
*/
public function __wakeup()
{
throw new Exception("Cannot unserialize singleton");
}
}