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: