So, in case of "return new", wouldn't it make sense to remove the
warning as the code is 'legal'? And please, don't start a new "it's
just a friendly notice" flame war.It's just a notice, tune your error_reporting level accordingly.
Sorry, but that is just a stupid killer argument. I thought I had
written something like "please, don't start a new it's just a friendly
notice flame war".
May I conclude that what you really want to say is:
"Yes, return /byref/ new Foo() is bad code unless inside Foo's
constructor, $this is passed around and somebody somewhere stores yet
another reference to it. Accept that you wrote broken code: return new
Foo() is wrong, it needs to be return $tmp =& new Foo()."
Shaking his head,
Matthias
Matthias Pigulla schrieb:
So, in case of "return new", wouldn't it make sense to remove the
warning as the code is 'legal'? And please, don't start a new "it's
just a friendly notice" flame war.It's just a notice, tune your error_reporting level accordingly.
Sorry, but that is just a stupid killer argument. I thought I had
written something like "please, don't start a new it's just a friendly
notice flame war".
Jep, that would be a valid argument if one could not just adjust
error_reporting level but also the "error_throwing" behaviour. Some
people want to get notices, they just don't want to get THIS notice. So if
[throw_levels]
only_variables_can_be_returned_by_reference
= create_temp_and_shut_up_like_other_languages
could be configured this would be a valid argument ;-)
Other languages can pass objects by reference, not only variables.
And in the (conceptionally) most advanced languages like Ruby even
returning a 3 means returning an object.
A function defined as returning by reference should always quietly
create anonymous containers if the code returns non-variable-stored
values. This most prominently happens with
return new Classname();
And I personally also believe that
function &huba() { return 3; }
should implicitly be interpreted by PHP as
$internal_variable_with_random_or_no_name=3
return &$internal_variable_with_random_or_no_name;
The name doesn't matter as the caller doesn't want to know it.
May I conclude that what you really want to say is:
"Yes, return /byref/ new Foo() is bad code unless inside Foo's
constructor, $this is passed around and somebody somewhere stores yet
This somebody should be PHP.
another reference to it. Accept that you wrote broken code: return new
Foo() is wrong, it needs to be return $tmp =& new Foo()."Shaking his head,
Matthias
I second that. Let's go to the disco ;-)
OLLi
Backup? Backup? ...I knew I forgot something!