2009/8/24 Ralph Deffke <[email protected]>:
> 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" <[email protected]> wrote in message
> news:[email protected]...
>> 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