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