On Tue, 2004-06-01 at 19:45, Florian Schaper wrote:
> For completeness:
> Proposed behaviour of delete as opposed to unset:
> $ php-dev -r 'class Object { function __destruct() { echo
> "Destroyed\n"; }} $o= new Object(); $o2= &$o; delete $o; var_export( $o );
> var_export( $o2 ); echo
> "Shutting down\n";' Destroyed NULL NULL Shutting down
I could see this being useful, it certainly would make destructors much
more useful. However, I think it is also unnecessary in a language like
PHP. Additionally, since you can not be certain of the order
destructors are called in for objects when a script is terminated
(unless I missed a fix for this) it may cause an unhealthy dependence on
destructors. This could end with people having to put a bunch of delete
calls at the end of their functions/scripts/etc. to guarantee everything
wraps up sanely. I think this would be a very bad thing, not only
because it harbors memories of C/C++ but also because it would be
another confusing thing to teach new php OO coders.
> > Then again, why doesn't unset() do this? That seems kind of
> > inconsistent with the object-handle-pass-by-value semantics we have
> > in PHP5.
[snip]
> I for one could manage without a delete keyword with unset destroying
> the object referenced - which looks for me a more consistent
> behaviour as Timm pointed out.
The operation of unset makes sense to me and should, imho, not change.
It is used when you want to clear a particular variable of its contents,
not necessarily destroy the data; afaik it is similar to (if this were
valid):
$var =& null;
Looking at the examples and description in the manual[1] seems to
confirm this behavior in functions as well. As a result, if you wanted
to use unset to delete an object you would have to unset every variable
that contains a reference to it, as it should be for unset.
In my PHP OO coding so far I have come across many instances where I
need unset's type of functionality. One example of is in "poking holes"
in an array (ex. unset($arr['key']);). If unset also went through and
destroyed every copy of that instance it would seem to me to be a very
unexpected and bad result. Also, I can't work around it by setting the
array entry to null because the key would still exist. If a method
similar to delete is needed I vote for it having its own name. Possibly
inst_delete to reduce naming conflicts?
As a side note I have used count as a method name in a class before
without error. I assume that since it is a method of a class it does
not conflict with the existing count[2] function, even though it may,
arguably, be bad coding style.
[1] http://www.php.net/unset
[2] http://www.php.net/count
--
Adam Bregenzer
[EMAIL PROTECTED]
http://adam.bregenzer.net/
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php