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

2012-02-12 Thread Marc Easen

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



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

2012-02-10 Thread Stefan Marr
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


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



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

2012-02-09 Thread Marc Easen

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);

This example will produce running (PHP 5.4 RC7):

10
MyClass::foo()

Which as you can see is not the desired effect.

I send this email in the hope this can get the discussion under way 
regarding the magic constant __FUNCTION__.


Thanks,

Marc Easen