Marc Easen | 9 Feb 22:36
Picon

[PHP-DEV] Bug #61033 __FUNCTION__ doesn't report correctly in alias trait methods

Hello everyone,

I've recently came across an odd situation where __FUNCTION__ can 
produce a misleading results when using traits with aliased methods, see 
https://bugs.php.net/bug.php?id=61033. 
<https://bugs.php.net/bug.php?id=61033>
This has been closed and I've been asked start a discussion on here if I 
disagree with the ruling. The reason why I feel this should be changes 
to reflect the actual called function name is that one of main uses of 
the __FUNCTION__ constant it to refer back to the function that is 
currently running, for the use recursive functions:

trait FooTrait {
     public function foo($n) {
         if ($n == 0) return;
         echo $n . PHP_EOL;
         $function = __FUNCTION__;
         $this->$function(--$n);
     }
}

class MyClass {
     use FooTrait { foo as public countdown; }
     public function foo() {
         echo 'MyClass::foo()';
     }
}

$instance = new MyClass();
$instance->countdown(3);
(Continue reading)

Stefan Marr | 10 Feb 10:49
Picon

Re: [PHP-DEV] Bug #61033 __FUNCTION__ doesn't report correctly in alias trait methods

Hi Marc:

On 09 Feb 2012, at 22:36, Marc Easen wrote:

> The reason why I feel this should be changes to reflect the actual called function name is that one of main
uses of the __FUNCTION__ constant it to refer back to the function that is currently running, for the use
recursive functions:

I still maintain the position that __FUNCTION__, as __LINE__ and __FILE__, is supposed to be a lexical
constant. (In retro-spective, adapting __CLASS__ to do even more magic might have been a mistake, from a
conceptual point of view.)

So far, I was refraining from proposing any additions to the RFC before 5.4 is finally out and we see how it is
used in the wild.
But since recursive function calls are indeed a problem, we should look for a better solution.

I think, `self` is already a keyword anyway, perhaps we can use that for self-referential/recursive
function calls in traits? 

Best regards
Stefan

--

-- 
Stefan Marr
Software Languages Lab
Vrije Universiteit Brussel
Pleinlaan 2 / B-1050 Brussels / Belgium
http://soft.vub.ac.be/~smarr
Phone: +32 2 629 2974
Fax:   +32 2 629 3525
(Continue reading)

Marc Easen | 12 Feb 19:20
Picon

Re: [PHP-DEV] Bug #61033 __FUNCTION__ doesn't report correctly in alias trait methods

On Fri 10 Feb 2012 09:49:54 GMT, Stefan Marr wrote:
> Hi Marc:
>
> On 09 Feb 2012, at 22:36, Marc Easen wrote:
>
>> The reason why I feel this should be changes to reflect the actual called function name is that one of main
uses of the __FUNCTION__ constant it to refer back to the function that is currently running, for the use
recursive functions:
>
> I still maintain the position that __FUNCTION__, as __LINE__ and __FILE__, is supposed to be a lexical
constant. (In retro-spective, adapting __CLASS__ to do even more magic might have been a mistake, from a
conceptual point of view.)
>

As with PHP 5.4 you are able change the function name and the class you 
are running in thanks to traits, so makes sense to update these magic 
constants to represent the the value at run time as apposed to compile 
time.  __LINE__ and __FILE__ will always be relating to values at 
compile time.

Cheers,
Marc

--

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php


Gmane