#50383 [Fbk->Ver]: Exceptions thrown in __callStatic do not include file and line in trace.
| From: | jani@php.net | Date: | Fri, 04 Dec 2009 12:46:45 +0000 |
| Subject: | #50383 [Fbk->Ver]: Exceptions thrown in __callStatic do not include file and line in trace. | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-145412@lists.php.net to get a copy of this message | ||
ID: 50383
Updated by: jani@php.net
Reported By: RQuadling at GMail dot com
-Status: Feedback
+Status: Verified
Bug Type: Scripting Engine problem
Operating System: *
PHP Version: 5.*, 6
New Comment:
Nevermind, of course it caused error since 5.2 doesn't have
__callStatic.. :)
Previous Comments:
------------------------------------------------------------------------
[2009-12-04 12:42:30] jani@php.net
Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves.
A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external
resources such as databases, etc. If the script requires a
database to demonstrate the issue, please make sure it creates
all necessary tables, stored procedures etc.
Please avoid embedding huge scripts into the report.
And that first script of yours just causes a fatal error..
------------------------------------------------------------------------
[2009-12-04 12:15:47] rquadling@php.net
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] =>
)
------------------------------------------------------------------------
[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