Zeev Suraski writes:
> At 15:18 20/12/2001, Yasuo Ohgaki wrote:
> >Nobody should complain about BC changes if changes are notified
> >early enough and there is alternative way to do the same thing.
> >IMHO. (This has been done for some features such as track vars ;)
>
> That's a very impractical statement in my opinion... Breaking
> compatibility hurts (almost) regardless of when you announce you're going
> to break it. Users would still have to go over their code and fix it.
>
> What I *really* fail to understand is the gain we get by modifying exit()'s
> behavior, as opposed to adding a new function or adding a new $silent
> argument. Giving a WFF to several people? Consistency with other
> languages that have nothing to do with the Web environment (which is why we
> got so little complaints about this over *5* years)?
What would the problem be with the attached patch (against PHP
4.1.0rc3)? This patch meets the following criteria:
o Backward compatibility is maintained, since strings passed to
exit() will still be output. BC will only break in those instances
where something depends on the fact that PHP will not set the exit
code when exiting with a string--very unlikely. This should keep
the BC people happy and not introduce any new surprises.
o No new functions need to be created, and no new arguments need to
be added to exit(). This should keep the No New Functions or
Arguments For Small Functionalities people happy.
o exit() will now behave like other PHP functions wrt its argument
type. Whereas a PHP programmer expects the calls
somefunc('2') and somefunc(2) to behave identically, exit() breaks
this mould. This patch rectifies that, so that exit('2') and
exit(2) will now behave the same. Again, the only time BC is broken
is in cases where something depends on i.e. exit('2') outputting
'0'--which is likely to be *very* rare since it doesn't make any
sense.
Of course, the criterium which this patch does not fulfil is that of
killing the output from exit(), which would break BC. However, it
would still be possible to add an option second argument to exit()
which would suppress this output, but be off by default.
> I see this as very similar to the case sensitivity issue, even though this
> is obviously on a much smaller scale. It's possibly a bad decision that
> was made 5 years ago, but it was made all the same. Since it does *not*
> have far-reaching negative implications, it shouldn't be changed.
>
> Zeev
The current behaviour may not be earthshatteringly bad, but it does
break language consistency and so introduces a higher memory load on
the user (gotta remember that everything works the same 'cept
exit()). It also tends to keep some people (OK, at least me) from
doing much non-web scripting in PHP since it's a fairly fundamental
bit of functionality which is something of a bother to work
around. Not a major bother, but enough.
My point is this: we don't break, lose, or complicate anything with
this patch, and it makes the language more consistent and generally
usable.
Just my $0.02 for the night.
Torben
--- zend_execute.bak Wed Dec 19 16:19:44 2001
+++ zend_execute.c Wed Dec 19 16:37:29 2001
@@ -2379,11 +2379,16 @@
case ZEND_EXIT:
if (opline->op1.op_type != IS_UNUSED) {
zval *ptr;
+ zval exit_code;
ptr = get_zval_ptr(&opline->op1, Ts,
&EG(free_op1), BP_VAR_R);
- if (Z_TYPE_P(ptr) == IS_LONG) {
- EG(exit_status) = Z_LVAL_P(ptr);
- }
+
+ exit_code = *ptr;
+ zval_copy_ctor(&exit_code);
+ convert_to_long(&exit_code);
+
+ EG(exit_status) = Z_LVAL_P(&exit_code);
+
zend_print_variable(ptr);
FREE_OP(&opline->op1, EG(free_op1));
}
--
Torben Wilson <[EMAIL PROTECTED]>
http://www.thebuttlesschaps.com
http://www.hybrid17.com
http://www.inflatableeye.com
+1.604.709.0506
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]