Singleton PHP
<?php
class MySingleton {
private static $instance;
private string $x;
private function __construct(string $x)
{
$this->x = $x;
}
/**
* Los métodos estáticos los hacen accesibles
* sin la necesidad de instanciar una clase.
*
* No se puede utilizar $this con métodos estáticos,
* en su lugar se utiliza self
*/
public static function getInstance(string $x = ''): self
{
if (empty(self::$instance)) {
/**
* Equivalente a:
* self::$instance = new MySingleton($x);
*/
self::$instance = new self($x);
}
return self::$instance;
}
public function getX(): string
{
return $this->x;
}
public function setX(string $x): void
{
$this->x = $x;
}
}
// $a = new MySingleton('Hola'); // Error
$a = MySingleton::getInstance('Hola Mundo');
echo $a->getX().PHP_EOL; // Hola Mundo
$b = MySingleton::getInstance('Otra instancia');
echo $b->getX().PHP_EOL; // Hola Mundo
$b->setX('Instancia compartida');
echo $b->getX().PHP_EOL; // Instancia compartida
echo $a->getX().PHP_EOL; // Instancia compartida
