#45765 [Asn->Csd]: ReflectionObject with default parameters of self::xxx cause an error.

[email protected]
Newsgroups php.bugs
Message-ID <[email protected]>
 ID:               45765
 Updated by:       [email protected]
 Reported By:      RQuadling at GMail dot com
-Status:           Assigned
+Status:           Closed
 Bug Type:         Reflection related
 Operating System: Windows XP SP2
 PHP Version:      5.2CVS, 5.3CVS, 6CVS
 Assigned To:      felipe
 New Comment:

This bug has been fixed in CVS.

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/.
 
Thank you for the report, and for helping us make PHP better.

Fixed in 5.2, 5.3 and HEAD.


Previous Comments:
------------------------------------------------------------------------

[2008-08-10 23:51:35] [email protected]

It's also reproducible on 5_2, then not related with last changes.

------------------------------------------------------------------------

[2008-08-08 19:54:08] [email protected]

Dmitry, I guess it is due the last changes with constants.

------------------------------------------------------------------------

[2008-08-08 15:18:04] RQuadling at GMail dot com

If I change the default to a string, the output is (and I just noticed
that it is truncated) ...

Object of class [ <user> class foo ] {
  @@ C:\tr.php 2-9

  - Constants [1] {
    Constant [ string BAR ] { foo's bar }
  }

  - Static properties [0] {
  }

  - Static methods [0] {
  }

  - Properties [0] {
  }

  - Dynamic properties [0] {
  }

  - Methods [1] {
    Method [ <user> public method test ] {
      @@ C:\tr.php 5 - 7

      - Parameters [1] {
        Parameter #0 [ <optional> $s_Text = 'Replaced self::...' ]
      }
    }
  }
}

------------------------------------------------------------------------

[2008-08-08 15:16:21] RQuadling at GMail dot com

Description:
------------
If you have a method with a parameter whose default is a local class
constant, the ReflectionObject throws a Fatal Error.

Reproduce code:
---------------
<?php
class foo {
 const BAR = "foo's bar";

 function test ($s_Text = self::BAR) {
  echo $s_Text, PHP_EOL;
 }

}

$o_Foo = new foo();

ReflectionObject::export($o_Foo);

Expected result:
----------------
Object of class [ <user> class foo ] {
  @@ C:\tr.php 2-9

  - Constants [1] {
    Constant [ string BAR ] { foo's bar }
  }

  - Static properties [0] {
  }

  - Static methods [0] {
  }

  - Properties [0] {
  }

  - Dynamic properties [0] {
  }

  - Methods [1] {
    Method [ <user> public method test ] {
      @@ C:\tr.php 5 - 7

      - Parameters [1] {
        Parameter #0 [ <optional> $s_Text = self::BAR]
      }
    }
  }
}

Actual result:
--------------
Fatal error: Undefined class constant 'self::BAR' in C:\tr.php on line
13


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=45765&edit=1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.