Edit report at http://bugs.php.net/bug.php?id=50383&edit=1

 ID:               50383
 Comment by:       rquadl...@php.net
 Reported by:      RQuadling at GMail dot com
 Summary:          Exceptions thrown in __call / __callStatic do not
                   include file and line in trace
 Status:           Closed
 Type:             Bug
 Package:          Scripting Engine problem
 Operating System: *
 PHP Version:      5.*, 6
 Assigned To:      felipe

 New Comment:

Any chance of the win32 snapshots being turned on again?


Previous Comments:
------------------------------------------------------------------------
[2010-03-07 03:17:14] fel...@php.net

This bug has been fixed in SVN.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.



------------------------------------------------------------------------
[2010-03-07 03:17:13] fel...@php.net

Automatic comment from SVN on behalf of felipe
Revision: http://svn.php.net/viewvc/?view=revision&revision=295913
Log: - Fixed bug #50383 (Exceptions thrown in __call / __callStatic do
not include file and line in trace)

------------------------------------------------------------------------
[2009-12-04 12:47:57] j...@php.net

Simple test that works in all branches:



<?php

class myClass {

  function __call($method, $args) {

    throw new Exception("Missing static method '$method'.");

  }

}



function thrower() {

  $foo = new myClass;

  $foo->ThrowException();

}



try {

  thrower();

} catch(Exception $e) {

  var_dump($e->getTrace());

}

?>

------------------------------------------------------------------------
[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/bug.php?id=50383&edit=1

Reply via email to