ID:               50383
 Updated by:       [email protected]
 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] [email protected]

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] [email protected]

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