Re: unset( $anobject) does not invoce __destruct()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2009/8/24 Ralph Deffke <ralph_deffke@xxxxxxxx>:
> this is also not the full truth try this and it works
> what are the circumstances that is causing this problem then, yes I do have
> distributed references over my script and there are clearly references still
> set, however after running the snipped script I can not see what I do
> special in my script causing the problem. I even tried with public and
> private static in other objects. it works. however the manual indicates the
> refernce counter has to be 0.

Assuming you're using PHP 5...

> <?php
>
>
> abstract class a {
>  public function __construct(){
>    echo "constructing....<br>";
>  }
>  public function __destruct(){
>    echo "destructing....<br>";
>  }
> }
>
> class b extends a{
>
> }
>
> $c = new b();

refcount = 1

> $d = $c ;   // works

refcount = 2

> $f[] = $c ; // works

refcount = 3

> class e {
>  private $m;
>
>  public function setM( $m ){
>    $this->m = $m;
>  }
> }
>
> $o = new e();
> $o->setM( $c ); // works

refcount = 4 (due to assignment in setM)

> unset( $c );

refcount = 3

In PHP 5 all objects are passed by reference unless explicitly cloned.
This means that assigning an object variable to another variable does
nothing more than assign a reference and increment the referece count.

What exactly in the manual leads you to believe that after the unset
the refcount should be 0?

-Stuart

-- 
http://stut.net/

> "Lupus Michaelis" <mickael+php@xxxxxxxxxxxx> wrote in message
> news:41.F9.03363.011929A4@xxxxxxxxxxxxxxx
>> kranthi wrote:
>> > unset($obj) always calls the __destruct() function of the class.
>>
>>    Never calls the dtor. The dtor will be called only when the reference
>> count reaches 0.
>>
>> class c { function __destruct() { echo 'dying !' ; } }
>> $v1 = new c ;
>> $v2 = $v1 ;
>>
>> unset($v1) ; // don't call the dtor
>> unset($v2) ; // call the dtor
>>
>> --
>> Mickaël Wolff aka Lupus Michaelis
>> http://lupusmic.org
>
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux