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

Reply via email to