Edit report at https://bugs.php.net/bug.php?id=62715&edit=1
ID: 62715 Updated by: [email protected] Reported by: benjamin dot morel at strictcoding dot co dot uk Summary: ReflectionParameter::isDefaultValueAvailable() wrong result -Status: Open +Status: Closed Type: Bug Package: Reflection related Operating System: CentOS 6.3, Windows 7 PHP Version: 5.4.5 -Assigned To: +Assigned To: laruence Block user comment: N Private report: N New Comment: 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. Previous Comments: ------------------------------------------------------------------------ [2012-08-01 12:23:51] [email protected] 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] [email protected] 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] [email protected] 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
