Singleton Pattern no PHP 4
Já sabemos como funciona o singleton pattern no PHP 5, mas devido as capacidades limitadas de POO do PHP4, não é possível se utilizar do mesmo padrão de desenvolvimento neste, mas há um pequeno truque que podemos fazer para obter o mesmo resultado.
No PHP4 não é possível termos propriedades estáticas em classes, mas ainda é possível ter variáveis estáticas dentro de funções. Assim podemos criar uma função capaz de fazer o papel do singleton ao instanciar uma classe em um objeto estático. Veja o Exemplo:
function &singleton() { static $obj; if (!isset($obj)) { //instancia a classe, caso o objeto já não exista $obj = new stdclass; } return $obj; }
No exemplo, eu usei a classe padrão stdclass do PHP, mas o mesmo funciona com qualquer classe definida pelo usuário. Você pode, inclusive, utilizar um array no lugar da variável $obj para usar a mesma função singleton para instanciar ou recuperar várias classes.
Note o operador de referência ‘&’ antes do nome da função. Ele é necessário para garantir que a função sempre retorne uma referência para o objeto estático, ao invés de criar um novo objeto, e também é necessário ao se atribuir o retorno da função a uma variável . Veja um exemplo de uso da função:
$foo =& singleton(); //cria um objeto var_dump($foo); $foo->property = 'SamuraiDio'; //atribui um valor a uma propriedade var_dump($foo); $bar =& singleton(); //recupera o objeto existe (não irá criar um novo) var_dump($bar);
A saída do código acima, será como a seguir:
object(stdClass)(0) {
}
object(stdClass)(1) {
["property"]=>
string(10) "SamuraiDio"
}
object(stdClass)(1) {
["property"]=>
string(10) "SamuraiDio"
}
Note que a terceira chamadas a var_dump() ainda exibe o valor da propriedade, apesar de ser de outra variável. Isso ocorre porque nossa função singleton() não instancia a classe novamente, mas sim apenas retorna uma referência para o objeto já existente. Assim temos um Singleton Pattern functional também para PHP4.
NOTA: Mesmo com a possibilidade de usar Singleton no PHP4 utiizando-se desta técnica, é altamente recomendável atualizar suas instalações para PHP5, beneficiando-se com a maior capacidade e segurança da versão.
Fontes: http://www.weberdev.com/get_example-4014.html, http://br.php.net/manual/pt_BR/language.variables.scope.php#language.variables.scope.static


Últimos Comentários