From: Simon Schick [mailto:simonsimc...@googlemail.com] 
> 
> 2012/3/9 Lazare Inepologlou <linep...@gmail.com>
> >
> > Type casting combined with passing by reference is problematic in many 
> > ways. Just an example:
> >
> > fuction foo( string & $buffer) { ... } foo( $my_buffer );
> >
> > Here, $my_buffer has just been declared, so it is null. Should this be an 
> > error? I don't know! So, I think that that passing by reference should not 
> > be (immediately) supported.
> >
>
> Hi, Lazare
>
> This should at least throw an E_NOTICE :) And also an error as NULL is not 
> allowed here.
>
> Let me modify your example:
>
> fuction foo( string & $buffer = NULL) { ... } foo( $my_buffer );
>
> This would only raise the E_NOTICE because the variable has not been declared.
> Or would you say that NULL is equal with an empty string (talking about 
> implicit casting)? I would not like that, but if, don't let it be (int)0 or 
> (bool)false as well.
>
> Bye
> Simon

The reason you have to validate the input type in this case is because even 
though it is a reference, we don't ACTALLY know that it isn't supposed to 
contain an input (even though that would be against all sane rules most of the 
time).

I'm not attached to this idea at all, but I thought I'd throw it out and see if 
anyone can think of a problem with it; what if we added extra out and inout 
hints for references?

// So this would give no error at all. Parameter is anticipated to be for 
output. Just silently change the type and don't warn on anything.
fuction foo( out string & $buffer) { ... } foo( $my_buffer );

// This WOULD give an error, because the parameter is also an input parameter:
fuction foo( inout string & $buffer = NULL) { ... } foo( $my_buffer );

// In any case no errors on these:
fuction foo( inout string & $buffer = NULL) { ... } foo( (string)$my_buffer );
fuction foo( string & $buffer = NULL) { ... } foo( (string)$my_buffer );

If we assumed that all references were out unless stated otherwise we could 
avoid reserving an "out" keyword, and only add "inout", which is unlikely to 
conflict with stuff.

Like I said, no attachment to this at all. My gut tells me I may have missed 
something really stupid here. Just brainstorming.

John Crenshaw
Priacta, Inc.

Reply via email to