Un'implementazione incompleta di un design pattern PHP porta spesso a problemi nello sviluppo delle applicazioni. Un tipico esempio è quello di una parziale implementazione del Singleton Pattern. Chiamare un metodo di una classe come Class::method()
è consigliato solo quando il metodo è dichiarato come static
. Nel caso di un'implementazione incompleta di questo pattern per molti è l'unico modo di usare il metodo di quella classe. Vediamo insieme i dettagli.
L'implementazione incompleta del Singleton Pattern è la seguente:
class Test
{
private function __construct() {}
public function method()
{
//...
}
}
Questa implementazione è incompleta perchè questo pattern prevede anche la creazione di un metodo pubblico statico con cui restituire un'instanza della classe (statica anch'essa):
class Test
{
private function __construct() {}
public static $instance = null;
public static function getInstance()
{
if(!isset(self::$instance)) {
self::$instance = new Test();
}
return self::$instance;
}
public function method()
{
//...
}
}
Ecco quindi il modo corretto di invocare il metodo Test::method()
:
$test = Test::getInstance();
$test->method();
Notiamo come il metodo Test::getInstance()
venga dichiarato come static
in modo da consentire questa volta la chiamata corretta tramite il risolutore di scope.