Doc #80764 [Ver]: method magic constant in closure loses class

From: Date: Thu, 18 Feb 2021 15:12:16 +0000
Subject: Doc #80764 [Ver]: method magic constant in closure loses class
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-18566@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 User updated by: bernievbb at icloud dot com Reported by: bernievbb at icloud dot com Summary: method magic constant in closure loses class Status: Verified Type: Documentation Problem Package: *General Issues Operating System: macos PHP Version: 8.0Git-2021-02-17 (Git) Block user comment: N Private report: N New Comment: 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. Previous Comments: ------------------------------------------------------------------------ [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.doc.bugs (#18566) next »