ID: 50383
Updated by: [email protected]
Reported By: RQuadling at GMail dot com
Status: Open
Bug Type: Scripting Engine problem
Operating System: Windows XP SP3
PHP Version: 5.3SVN-2009-12-04 (snap)
New Comment:
It seems that __call exhibits the same issue.
Further, for sub-classes which allow cascading of __call/__callStatic,
the stack doesn't show the file/line for those.
<?php
// myClass.php
class myClass {
public static function __callStatic($method, $args) {
throw new Exception("Missing static method
'$method'.");
}
}
?>
<?php
// mySubClass.php
require_once 'myClass.php';
class mySubClass extends myClass {
public static function __callStatic($method, $args) {
parent::__callStatic($method, $args);
}
}
?>
<?php
// missingTrace.php
require 'mySubClass.php';
function staticThrower() {
mySubClass::StaticThrowException();
}
try {
staticThrower();
} catch(Exception $e) {
print_r($e);
}
?>
Outputs ...
Exception Object
(
[message:protected] => Missing static method
'StaticThrowException'.
[string:Exception:private] =>
[code:protected] => 0
[file:protected] => Z:\myClass.php
[line:protected] => 4
[trace:Exception:private] => Array
(
[0] => Array
(
[file] => Z:\mySubClass.php
[line] => 6
[function] => __callStatic
[class] => myClass
[type] => ::
[args] => Array
(
[0] => StaticThrowException
[1] => Array
(
)
)
)
[1] => Array
(
[function] => __callStatic
[class] => mySubClass
[type] => ::
[args] => Array
(
[0] => StaticThrowException
[1] => Array
(
)
)
)
[2] => Array
(
[file] => Z:\missingstatictrace3.php
[line] => 5
[function] => StaticThrowException
[class] => mySubClass
[type] => ::
[args] => Array
(
)
)
[3] => Array
(
[file] => Z:\missingstatictrace3.php
[line] => 9
[function] => staticThrower
[args] => Array
(
)
)
)
[previous:Exception:private] =>
)
Previous Comments:
------------------------------------------------------------------------
[2009-12-04 11:32:44] RQuadling at GMail dot com
Description:
------------
An exception thrown in a __callStatic() method does not store the file
name or the line number in the trace.
Reproduce code:
---------------
<?php
class myClass {
public static function __callStatic($method, $args) {
throw new Exception("Missing static method '$method'.");
}
}
function thrower() {
myClass::ThrowException();
}
try {
thrower();
} catch(Exception $e) {
print_r($e->getTrace());
}
Expected result:
----------------
Array
(
[0] => Array
(
[file] => Z:\missingstatictrace.php
[line] => 4
[function] => __callStatic
[class] => myClass
[type] => ::
[args] => Array
(
[0] => ThrowException
[1] => Array
(
)
)
)
[1] => Array
(
[file] => Z:\missingstatictrace.php
[line] => 9
[function] => ThrowException
[class] => myClass
[type] => ::
[args] => Array
(
)
)
[2] => Array
(
[file] => Z:\missingstatictrace.php
[line] => 13
[function] => thrower
[args] => Array
(
)
)
)
Actual result:
--------------
Array
(
[0] => Array
(
[function] => __callStatic
[class] => myClass
[type] => ::
[args] => Array
(
[0] => ThrowException
[1] => Array
(
)
)
)
[1] => Array
(
[file] => Z:\missingstatictrace.php
[line] => 9
[function] => ThrowException
[class] => myClass
[type] => ::
[args] => Array
(
)
)
[2] => Array
(
[file] => Z:\missingstatictrace.php
[line] => 13
[function] => thrower
[args] => Array
(
)
)
)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=50383&edit=1