Doc->Bug #80764 [Ver]: __METHOD__ in closure looses class

From: Date: Thu, 26 Aug 2021 12:08:51 +0000
Subject: Doc->Bug #80764 [Ver]: __METHOD__ in closure looses class
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-236080@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=80764&edit=1 ID: 80764 Updated by: cmb@php.net Reported by: bernievbb at icloud dot com -Summary: method magic constant in closure loses class +Summary: __METHOD__ in closure looses class Status: Verified -Type: Documentation Problem +Type: Bug -Package: *General Issues +Package: Scripting Engine problem Operating System: macos PHP Version: 8.0Git-2021-02-17 (Git) Block user comment: N Private report: N New Comment: Oh, I was too fast here, and missed your reply. This appears to be an actual bug. Previous Comments: ------------------------------------------------------------------------ [2021-02-18 15:12:16] bernievbb at icloud dot com Clearly __METHOD__ is NOT just a synonym for __FUNCTION__ ... All inside a namespaced class method: NOT in closure: __FUNCTION__ => method name __METHOD__ => namespace + className + "::" + methodName __CLASS__ => namespace + className IN a closure: __FUNCTION__ => namespace + "{closure}" __METHOD__ => namespace + "{closure}" __CLASS__ => namespace + className I would expect __METHOD__ to report the closure's parent method. To be consistent with not in a closure I would also reasonably expect __METHOD__ to provide the class name. __METHOD__ and __FUNCTION__ are useless in a closure. Surely this is not intended. I see no simple alternative. Think debugging, logging etc. ------------------------------------------------------------------------ [2021-02-18 11:18:34] cmb@php.net For funtions, __METHOD__ is a synonym for __FUNCTION__[1]. Anonymous functions are *functions*, so this behaves as intended, although the documentation[2] should be improved. [1] <https://3v4l.org/fr6E6> [2] <https://www.php.net/manual/en/language.constants.magic.php> ------------------------------------------------------------------------ [2021-02-17 18:15:04] bernievbb at icloud dot com Description: ------------ class and method are lost when __METHOD__ called in closure. Test script: --------------- <?php namespace pdox\pal; class test { function test1() { var_dump(__METHOD__); // string(21) "pdox\pal\test::test1" $a = function() {return __METHOD__;}; var_dump($a()); // string(18) "pdox\pal\{closure}" $b = fn() => __METHOD__; var_dump($b()); // string(18) "pdox\pal\{closure}" } }?> ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=80764&edit=1

« previous php.bugs (#236080) next »