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

Reply via email to