#27265 [Bgs]: Reflection API :: Reflection_Property fails when a const is passed
ID: 27265
User updated by: jw at jwscripts dot com
Reported By: jw at jwscripts dot com
Status: Bogus
Bug Type: Zend Engine 2 problem
Operating System: *
PHP Version: 5CVS-2004-02-15
New Comment:
Another workaround consists of first trying to create an instance of
the ReflectionProperty class and when this fails, creating an instance
of the ReflectionObject class and search for a match in the arrays
returned by its getConstants() or getStaticProperties() method
(whichever is appropriate).
Anyways, thanks for looking into this again. Great job everybody!
Previous Comments:
------------------------------------------------------------------------
[2004-06-09 11:13:13] D dot Kingma at jool dot nl
I Think the problem your are describing is more that of that the
reflectionProperty class constructor doesn't work well with properties
that are written in capitals, as your example with static illustrates.
When you remove the static keyword the problem is reproducable (You
cannot initiate the reflectionProperty when the name of the property is
in capitals).
[Workaround]
You could use the getProperties method of the reflectionClass object
which will return the reflectionProperty object for variables that are
written in capitals.
------------------------------------------------------------------------
[2004-02-16 16:55:57] jw at jwscripts dot com
> We are missing a class 'Reflection_Const'.
IMO, you are not missing a Reflection_Const class, but a method
isConst() in the Reflection_Property class.
------------------------------------------------------------------------
[2004-02-16 15:04:18] helly@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
We are missing a class \'Reflection_Const\'.
------------------------------------------------------------------------
[2004-02-15 15:00:46] jw at jwscripts dot com
Description:
------------
When passing a constant to the constructor of the Reflection_Property
class, an exception is thrown.
You can work around this, e.g., by creating an instance of the
Reflection_Object class instead, but this isn't very pretty.
The same problem occurres when a constant with one or more uppercased
characters is defined, e.g.:
const $TEST = "foo";
Reproduce code:
---------------
<?
class Foo {
const TEST = "foo";
// Fails too: static $TEST = "foo";
// Success : static $test = "foo";
}
class Types extends Reflection_Property {
public function __construct($object, $name) {
parent::__construct($object, $name);
}
}
$types = new Types("Foo", "TEST");
?>
Expected result:
----------------
No output
Actual result:
--------------
Fatal error: Uncaught exception 'reflection_exception' with message
'Property Foo::$TEST does not exist' in [...] Stack trace: #0
[...](13): Types->__construct() #1 {main} thrown in [...] on line
[...]
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=27265&edit=1
Thread (6 messages)