Req #70282 [Opn]: class not shown in reflection exception

From: Date: Thu, 20 Aug 2015 11:13:34 +0000
Subject: Req #70282 [Opn]: class not shown in reflection exception
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-195370@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=70282&edit=1

 ID:                 70282
 Updated by:         requinix@php.net
 Reported by:        info at dynasource dot eu
 Summary:            class not shown in reflection exception
 Status:             Open
 Type:               Feature/Change Request
 Package:            Reflection related
 Operating System:   W7
 PHP Version:        7.0.0beta3
 Block user comment: N
 Private report:     N

 New Comment:

Repro?

__CLASS__ only works within an actual class because it's a compile-time value. Not evaluated.
If you defined it within a closure within a class, that's fine, but in a closure outside a
class and then evaluated within a class won't work.
And I'm seeing that behavior all the way back to 5.4.0. Except for 7.0.0beta2 which had a bug.


Previous Comments:
------------------------------------------------------------------------
[2015-08-20 06:38:47] info at dynasource dot eu

agreed.

But this problem did arise because of the variable __CLASS__ not to be working in a Closure. Is this
normal behavior? It breaks backward compatibility.

------------------------------------------------------------------------
[2015-08-19 17:38:59] cmb@php.net

> While I'm here, testing for an empty class name and/or changing
> the message to "Class '%s' does not exist" could help this
> particular case.

I've checked other class related error messages, and it appears
it's customary to have the class name (single-)quoted. As such it
would make sense to change the reflection related error messages
in this regard. However, the other reflection related error
messages would have to be changed as well (properties, functions,
methods etc. should also be quoted), but that would likely break
all 300+ reflection tests, so that's quite some work.

Anyhow, I still don't think the current behavior is a bug,
therefore changing to feature request.

------------------------------------------------------------------------
[2015-08-19 10:07:38] info at dynasource dot eu

correct, it was because of an empty classname.

The reason why it appeared was because of using __CLASS__ within a Closure

------------------------------------------------------------------------
[2015-08-19 07:31:17] requinix@php.net

I assume that's in a browser? Please do a View Source, or a right-click Inspect Element (or
whatever), and check the raw HTML for that message. You will probably see the doubled space
"Class  does not exist" that @cmb mentioned. If so then it means $class was empty.

Consider doing a var_dump($class) just before that line, too.

While I'm here, testing for an empty class name and/or changing the message to "Class
'%s' does not exist" could help this particular case.

------------------------------------------------------------------------
[2015-08-19 07:20:45] info at dynasource dot eu

Strange. Ive got an image uploaded at:

https://cloud.githubusercontent.com/assets/125726/9287889/20ef278a-432d-11e5-9edf-0a8732f339d1.png

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=70282


--
Edit this bug report at https://bugs.php.net/bug.php?id=70282&edit=1


Thread (15 messages)

« previous php.bugs (#195370) next »