#36687 [Opn]: ReflectionParameter::getDeclaringClass returns wrong result
| From: | elias at adaptiveinstance dot com | Date: | Sat, 11 Mar 2006 19:07:40 +0000 |
| Subject: | #36687 [Opn]: ReflectionParameter::getDeclaringClass returns wrong result | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-94195@lists.php.net to get a copy of this message | ||
ID: 36687
User updated by: elias at adaptiveinstance dot com
Reported By: elias at adaptiveinstance dot com
Status: Open
Bug Type: Feature/Change Request
Operating System: *
PHP Version: 5CVS-2006-03-10 (snap)
Assigned To: johannes
New Comment:
In that case i must understand anythink completely wrong or...
---code
class Foo
{
function myMeth($param0){}
}
$class = new ReflectionClass('Foo');
$params = $class->getMethod('myMeth')->getParameters();
var_dump($params[0]->getDeclaringClass());
---output
NULL
---end
...NULL is the declaring class.
Previous Comments:
------------------------------------------------------------------------
[2006-03-11 18:34:09] helly@php.net
It definitively returns which class declared the parameter.
You are in RelfectionParameter here not in RelfectionTypeHint which
doesn't exist.
------------------------------------------------------------------------
[2006-03-11 18:30:00] elias at adaptiveinstance dot com
Alias or not, getDeclaringClass does not return the 'declaring' class
and i don't think someone expects this.
getTypeHintClass sounds good.
------------------------------------------------------------------------
[2006-03-11 17:08:21] helly@php.net
getClass() is an alias for getDeclaringClass() in 5.1 and will be
dropped in later versions.
What you want is a new method maybe named getParameterClass() or
getTypeHintClass().
------------------------------------------------------------------------
[2006-03-10 22:19:12] elias at adaptiveinstance dot com
Description:
------------
The method ReflectionParameter::getDeclaringClass() always return the
wrong result. I should reaturn the reflection object of the declaring
class and not that of the typehint class.
Further this method has been introduced somewhere between php 5.0.5 and
5.1.3, but the documentation doesn't mention it.
Reproduce code:
---------------
class OtherClass {}
class MyClass
{
function myMeth(OtherClass $param0, $param1){}
}
$class = new ReflectionClass('MyClass');
$params = $class->getMethod('myMeth')->getParameters();
var_dump($params[0]->getDeclaringClass());
var_dump($params[0]->getClass());
var_dump($params[1]->getDeclaringClass());
var_dump($params[1]->getClass());
Expected result:
----------------
object(ReflectionClass)#2 (1) {
["name"]=>
string(10) "MyClass"
}
object(ReflectionClass)#2 (1) {
["name"]=>
string(10) "OtherClass"
}
object(ReflectionClass)#2 (1) {
["name"]=>
string(10) "MyClass"
}
NULL
Actual result:
--------------
object(ReflectionClass)#2 (1) {
["name"]=>
string(10) "OtherClass"
}
object(ReflectionClass)#2 (1) {
["name"]=>
string(10) "OtherClass"
}
NULL
NULL
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=36687&edit=1