Bug #62715 [Com]: ReflectionParameter::isDefaultValueAvailable() wrong result

From: Date: Thu, 02 Aug 2012 10:19:20 +0000
Subject: Bug #62715 [Com]: ReflectionParameter::isDefaultValueAvailable() wrong result
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-172387@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=62715&edit=1 ID: 62715 Comment by: benjamin dot morel at strictcoding dot co dot uk Reported by: benjamin dot morel at strictcoding dot co dot uk Summary: ReflectionParameter::isDefaultValueAvailable() wrong result Status: Closed Type: Bug Package: Reflection related Operating System: CentOS 6.3, Windows 7 PHP Version: 5.4.5 Assigned To: laruence Block user comment: N Private report: N New Comment: Thanks for the quick fix, isDefaultValueAvailable() works indeed, but getDefaultValue() still throws an exception: <?php function test(PDO $a = null, $b = 0, array $c) {} $r = new ReflectionFunction('test'); foreach ($r->getParameters() as $p) { if ($p->isDefaultValueAvailable()) { var_export($p->getDefaultValue()); } } Fatal error: Uncaught exception 'ReflectionException' with message 'Parameter is not optional' Previous Comments: ------------------------------------------------------------------------ [2012-08-01 12:24:24] laruence@php.net This bug has been fixed in SVN. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. For Windows: http://windows.php.net/snapshots/ Thank you for the report, and for helping us make PHP better. ------------------------------------------------------------------------ [2012-08-01 12:23:51] laruence@php.net Automatic comment on behalf of laruence Revision: http://git.php.net/?p=php-src.git;a=commit;h=10642aa9e4f1eb694a8f7b514cc234cb24545744 Log: Fixed bug #62715 (ReflectionParameter::isDefaultValueAvailable() wrong result) ------------------------------------------------------------------------ [2012-08-01 12:22:46] laruence@php.net Automatic comment on behalf of laruence Revision: http://git.php.net/?p=php-src.git;a=commit;h=10642aa9e4f1eb694a8f7b514cc234cb24545744 Log: Fixed bug #62715 (ReflectionParameter::isDefaultValueAvailable() wrong result) ------------------------------------------------------------------------ [2012-08-01 12:21:35] laruence@php.net Automatic comment on behalf of laruence Revision: http://git.php.net/?p=php-src.git;a=commit;h=10642aa9e4f1eb694a8f7b514cc234cb24545744 Log: Fixed bug #62715 (ReflectionParameter::isDefaultValueAvailable() wrong result) ------------------------------------------------------------------------ [2012-08-01 11:24:32] benjamin dot morel at strictcoding dot co dot uk Description: ------------ When ReflectionParameter::isOptional() returns false, because other parameters after it are required, isDefaultValueAvailable() always return false, even is there actually is a default value. I've read this older bug report: https://bugs.php.net/bug.php?id=41382 It looks like at that time, this behaviour had been considerer consistent. I do think this should be revisited however, as in the example function below, there is absolutely no way with Reflection to get the default value for the given parameter. Reflection is a powerful tool for autowiring in Dependency Injection containers, where it is interesting to check whether default parameters are available, regardless of their order. Test script: --------------- function test(PDO $a = null, $b = 0, array $c) {} $r = new ReflectionFunction('test'); foreach ($r->getParameters() as $p) { echo $p->getName(); echo " isDefaultValueAvailable: " . var_export($p->isDefaultValueAvailable(), true) . "\n"; echo " isOptional: " . var_export($p->isOptional(), true) . "\n"; echo " allowsNull: " . var_export($p->allowsNull(), true) . "\n"; echo "\n"; } Expected result: ---------------- a isDefaultValueAvailable: true isOptional: false allowsNull: true b isDefaultValueAvailable: true isOptional: false allowsNull: true c isDefaultValueAvailable: false isOptional: false allowsNull: false Actual result: -------------- a isDefaultValueAvailable: false isOptional: false allowsNull: true b isDefaultValueAvailable: false isOptional: false allowsNull: true c isDefaultValueAvailable: false isOptional: false allowsNull: false ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=62715&edit=1

« previous php.bugs (#172387) next »