Re: AW: [PHP-DEV] return /* by reference */ new Foo() in PHP4

From: Date: Sun, 09 Oct 2005 11:46:32 +0000
Subject: Re: AW: [PHP-DEV] return /* by reference */ new Foo() in PHP4
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-19530@lists.php.net to get a copy of this message
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!

« previous php.internals (#19530) next »