I agree completely...
I think the GC should be better documented.
I also would like someone to tell me why exceptions cannot be called in the
destructor? Since they can't, this means the reliability of a destructor is
uncontrolled and nothing can be done to see if this completes successfully.

This in some way or another, renders them completely useless if you require
them to complete an operation and at least have the peace of mind that you
will be able to deal with errors rather than the application throwing a fatal
error.


On Tue, 20 Dec 2005 11:38:34 -0500, Alan Pinstein wrote
> > Your last post also indicates, that because the destructors are  
> > only called
> > after script termination, the scope of an object is global, always.
> > Is this true?
> 
> This isn't true, at least empirically. Destructors are called when  
> the GC frees the object.
> 
> For many objects, this is at script termination. But if you null out 
>  the ref to an object, it will occur immediately.
> 
> $a = new A();
> $a = null; // destructor called just after this line
> 
> I am not certain that this should be considered *predictable*  
> behavior, as the behavior of the GC is not well/publicly documented  
> to my knowledge, and thus this is a reasonable question for the  
> internals list.
> 
> Personally I would like to see more documentation of how GC works so 
>  that we as developers can depend on it a little better for OO 
> cleanup  activities. I have another thread going that still remains 
> unanswered  about how to prevent circular references to objects that 
> deadlock the  GC.
> 
> Alan
> 
> > Also, I've called fwrite in a destructor before, so clearly not all  
> > IO is
> > terminated before the destructor is called.
> > When you refer to output facility, what are you talking about?
> >
> > Many thanks
> > Daine Mamacos.
> >
> >
> > On Mon, 19 Dec 2005 20:16:07 +0100, Marcus Boerger wrote
> >> Hello Daine,
> >>
> >>   you still don't get it. Your problem is the way php works. You
> >> cannot put any output functionality in destructors because they are
> >> called *after* your scipt is being terminted (to be precise after
> >> the output facility has been shutdown on script termination).
> >>
> >> This is btw a question the general php list.
> >>
> >> marcus
> >>
> >> Monday, December 19, 2005, 11:07:53 AM, you wrote:
> >>
> >>> While you're example works, mine doesn't, it has to do with the  
> >>> class
> >>> assignment. If you actually bother to do anything with the class, it
> > doesn't work.
> >>
> >>> $ php -r 'class blah { function __destruct() { throw new Exception 
> >>> ("exception
> >>> thrown"); } } $blah = new blah();'
> >>
> >>> give that a try and see what happens
> >>> (;
> >>> also http://bugs.php.net/bug.php?id=33598 clearly states that  
> >>> they cannoy be
> >>> thrown in the destructor.
> >>> Errrr... *shrug*
> >>
> >>> On Fri, 16 Dec 2005 20:38:20 +0100, Marcus Boerger wrote
> >>>> Hello Daine,
> >>>>
> >>>> [EMAIL PROTECTED] /usr/src/PHP_5_1 $ php -r 'class A{function
> >>>> __destruct(){throw new Exception("A");}} new A;' make:
> >>>> `sapi/cli/php' is up to date.
> >>>>
> >>>> Fatal error: Uncaught exception 'Exception' with message 'A' in
> >>>> Command line code:1 Stack trace:
> >>>> #0 Command line code(1): A::__destruct()
> >>>> #1 {main}
> >>>>   thrown in Command line code on line 1
> >>>>
> >>>> As the code above clearly show, exceptions can be thrown.
> >>>>
> >>>> marcus
> >>>>
> >>>> Friday, December 16, 2005, 3:17:54 PM, you wrote:
> >>>>
> >>>>> Is there any reason why one is not allowed to throw an  
> >>>>> exception in the
> >>>>> destructor of a class?
> >>>>> I mean, it makes sense, considering this is not always the  
> >>>>> final step
> > of code,
> >>>>> and it is usually used for finalising things, and it would be a  
> >>>>> good
> > idea to
> >>>>> know if anything goes wrong at that stage.
> >>>>> Otherwise is there any compromise one can use to "emulate" this  
> >>>>> feature?
> >>>>
> >>>>> Daine Mamacos.
> >>>>
> >>>>> --
> >>>>> random signature
> >>>>
> >>>> Best regards,
> >>>>  Marcus
> >>>>
> >>>> -- 
> >>>> PHP Internals - PHP Runtime Development Mailing List
> >>>> To unsubscribe, visit: http://www.php.net/unsub.php
> >>
> >>> --
> >>> random signature
> >>
> >> -- 
> >> Best regards,
> >>  Marcus                            mailto:[EMAIL PROTECTED]
> >
> >
> > --
> > random signature
> >
> > -- 
> > PHP Internals - PHP Runtime Development Mailing List
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
> 
> -- 
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php


--
random signature

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to