php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #61602 Allow access to name of constant used as default value
Submitted: 2012-04-02 14:14 UTC Modified: 2012-05-15 09:17 UTC
From: [email protected] Assigned: sebastian (profile)
Status: Closed Package: Reflection related
PHP Version: 5.4Git-2012-04-02 (Git) OS: Irrelevant
Private report: No CVE-ID: None
 [2012-04-02 14:14 UTC] [email protected]
Description:
------------
When a constant is used for the default value of an optional parameter, the Reflection API (tries to) resolve(s) the constant to its value and then returns it as the default value.

In addition, I would like to have two additional methods in ReflectionParameter that expose 1) whether or not a default value "is a" constant and 2) the name of the constant.

In the example below, I am using temporary names ("defaultValueIsConstant" and "getDefaultValueConstantName") for these two methods because I cannot think of sensible method names right now.

Test script:
---------------
<?php
class Foo {
    const bar = '...';

    public function baz($bar = self::bar) {
    }
}

$m = new ReflectionMethod('Foo', 'baz');
$p = $m->getParameters();

foreach ($p as $_p) {
    var_dump($_p->getDefaultValue());

    if ($_p->defaultValueIsConstant()) {
        var_dump($_p->getDefaultValueConstantName());
    }
}

Expected result:
----------------
string(3) "..."
string(9) "self::bar"

Actual result:
--------------
string(3) "..."

Patches

getDefaultValueConstantName.diff (last revision 2012-04-03 00:23 UTC by [email protected])

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2012-04-02 14:34 UTC] [email protected]
It's definitely possible, I've just added something like this to VLD: https://github.com/derickr/vld/commit/f22862bfa8620780906f0e692f929a543264b5f8
 [2012-04-03 00:23 UTC] [email protected]
The following patch has been added/updated:

Patch Name: getDefaultValueConstantName.diff
Revision:   1333412604
URL:        https://bugs.php.net/patch-display.php?bug=61602&patch=getDefaultValueConstantName.diff&revision=1333412604
 [2012-04-03 00:24 UTC] [email protected]
Just created a quick patch. If it's Ok with everybody I'll commit it to master 
with tests.
 [2012-04-03 05:56 UTC] reeze dot xia at gmail dot com
Hi, pierrick & sebastian:
   I have create another patch for this request. it differ's in:

   - rename defaultValueIsConstant to isDefaultValueConstant to match bool 
return values's is* method naming.
   - handle global constant.
   - refactor code to remove duplicate.
   - add 3 tests for it.

and I've make test everything looks fine.

please review it for me.

Thanks.
 [2012-04-03 06:07 UTC] reeze dot xia at gmail dot com
PS:

@pierrick pull request is here https://github.com/php/php-src/pull/35.

thanks.
 [2012-04-03 09:22 UTC] [email protected]
Any chance this pull request will be merged into PHP 5.4.1? Thanks.
 [2012-04-08 00:45 UTC] [email protected]
Not very likely for 5.4.1, doesn't seem to be a critical bug. For 5.4.2, maybe.
 [2012-04-25 06:10 UTC] [email protected]
Can we at least merge the patch into master? Once it's there we can think about merging it into PHP 5.4 for PHP 5.4.2.
 [2012-05-15 07:11 UTC] [email protected]
Updated example script that uses new method names:

➜  ~  cat test.php 
<?php
class Foo {
    const bar = '...';

    public function baz($bar = self::bar) {
    }
}

$m = new ReflectionMethod('Foo', 'baz');
$p = $m->getParameters();

foreach ($p as $_p) {
    var_dump($_p->isDefaultValueConstant());

    if ($_p->isDefaultValueConstant()) {
        var_dump($_p->getDefaultValueConstantName());
    }
}

➜  ~  php test.php 
bool(true)
string(9) "self::bar"
 [2012-05-15 09:17 UTC] [email protected]
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-05-15 09:17 UTC] [email protected]
-Status: Open +Status: Closed -Assigned To: +Assigned To: sebastian
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Wed Dec 31 03:00:01 2025 UTC