Simulando Destrutores no PHP
Para continuar com o estilo usado nas aulas que dou para os alunos da techos e plusmaster informática, vou ser o mais direto possivel nesse artigo.
O modo que existe no PHP para simular destrutores em classes é o uso da função register_shutdown_function(). A mesma basicamente registra uma função callback que deve ser chamada quando o pedido para o script atual terminou.
No exemplo acima, registramos uma função de desligamento com a função register_shutdown_function(). A função será chamada quando seu script terminar de executar. Essa função chamará o método destrutor (destroy() neste casso, mas poderia ser qualquer outro método que vc escolhesse) em cada objeto na variável global $CLASSNAME_OBJECT_LIST. Cada objeto é adicionado à lista de objetos no construtor da classe adicionando uma referência à variável especial $this para o array.
Espero que esse artigo possa ajudar!
O modo que existe no PHP para simular destrutores em classes é o uso da função register_shutdown_function(). A mesma basicamente registra uma função callback que deve ser chamada quando o pedido para o script atual terminou.
<?php $CLASSNAME_OBJECT_LIST = array(); function classname_destructor() { global $CLASSNAME_OBJECT_LIST; if (count($CLASSNAME_OBJECT_LIST)) { reset($CLASSNAME_OBJECT_LIST); while (list(, $obj) = each($CLASSNAME_OBJECT_LIST)) { $obj->destroy(); } $CLASSNAME_OBJECT_LIST = null; } } class Tree { var $type; function Tree($type='oak') { $this->type = $type; global $CLASSNAME_OBJECT_LIST; array_push($CLASSNAME_OBJECT_LIST, &$this); } function destroy() { $this->type = null; } } register_shutdown_function("classname_destructor"); ?>
No exemplo acima, registramos uma função de desligamento com a função register_shutdown_function(). A função será chamada quando seu script terminar de executar. Essa função chamará o método destrutor (destroy() neste casso, mas poderia ser qualquer outro método que vc escolhesse) em cada objeto na variável global $CLASSNAME_OBJECT_LIST. Cada objeto é adicionado à lista de objetos no construtor da classe adicionando uma referência à variável especial $this para o array.
Espero que esse artigo possa ajudar!
Novo Comentário: