ID: 37816 Updated by: [EMAIL PROTECTED] -Summary: REflectionProperty does not throw exception when accessing protected attribute Reported By: pierrealain dot bourdil at free dot fr Status: Assigned Bug Type: Class/Object related -Operating System: gento +Operating System: * -PHP Version: 5.1.4 +PHP Version: 5.1.* Assigned To: helly New Comment:
There is some disabled code here which would fix the issue without the need to bailout. [EMAIL PROTECTED] /usr/src/php-cvs $ php -r 'class T{protected $p=2;} $o=new T; $r=new ReflectionProperty($o,"p"); var_dump($r->getValue($o));' make: `sapi/cli/php' is up to date. Fatal error: Cannot use array returned from ReflectionException::__get('trace') in write context in Unknown on line 0 Previous Comments: ------------------------------------------------------------------------ [2006-06-19 11:20:45] [EMAIL PROTECTED] No need for huge reproduce scripts, you need only this: <?php class test{ private $pp = 1; } $t = new test; $rp = new ReflectionProperty("test", "pp"); var_dump($rp->getValue($t)); ?> Marcus, you changed this: http://cvs.php.net/viewvc.cgi/php-src/ext/reflection/php_reflection.c?r1=1.185&r2=1.186 ------------------------------------------------------------------------ [2006-06-15 12:12:53] pierrealain dot bourdil at free dot fr bjori, the script is at http://pastebin.com/710566 best regards ------------------------------------------------------------------------ [2006-06-15 11:22:46] [EMAIL PROTECTED] Thank you for this bug report. To properly diagnose the problem, we need a short but complete example script to be able to reproduce this bug ourselves. A proper reproducing script starts with <?php and ends with ?>, is max. 10-20 lines long and does not require any external resources such as databases, etc. If possible, make the script source available online and provide an URL to it here. Try to avoid embedding huge scripts into the report. ------------------------------------------------------------------------ [2006-06-15 11:05:22] pierrealain dot bourdil at free dot fr Description: ------------ First , i hope to really submit a bug, at least i've done my best to check it. i've made a class that contains other class, with dynamic adding,removing possibilities, save,restaure from session, and which use __call,__get,__set method. Within __get method, i instanciate ReflectionProperty. When i access a protected property, using ReflectionProperty->getValue, i expect to catch an exception, but i don't. I can access this property. It works perfectly with ReflectionMethod, but no with ReflectionProperty. Reproduce code: --------------- $rp=new ReflectionProperty($myClass,value); try{ if ($rp->isStatic()) return $rp->getValue(null); else return $rp->getValue(self::$instance->aClasses[$myClass]); }catch( Exception $e){ echo $e->getMessage(); return null; } now a portion the class which contains property that i tri to access protected $pp; public function __construct(){ $this->pp="pp"; } Expected result: ---------------- this is what i expect, but for method, Trying to invoke protected method test::testFunction from scope ReflectionMethod i think i would expect something like that Trying to access protected property test::pp from scope Reflectionproperty Actual result: -------------- __get : pp ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=37816&edit=1