ID: 50383 Updated by: j...@php.net Reported By: RQuadling at GMail dot com -Status: Open +Status: Feedback Bug Type: Scripting Engine problem Operating System: Windows XP SP3 PHP Version: 5.3SVN-2009-12-04 (snap) New Comment:
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.. Previous Comments: ------------------------------------------------------------------------ [2009-12-04 12:15:47] rquadl...@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