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

 ID:                 52412
 Comment by:         alex dot offshore at gmail dot com
 Reported by:        madboyka at yahoo dot com
 Summary:            __autoload fails to throw exception when calling a
                     static method on the class
 Status:             Open
 Type:               Bug
 Package:            Scripting Engine problem
 Operating System:   Windows
 PHP Version:        5.3.3
 Block user comment: N

 New Comment:

Temporary solution.

Caveats and notices:

- The class actually WILL BE DEFINED ANYWAY;

- 'eval' usage;

- __callStatic used to avoid "method not found" error.



<?php

function __autoload($className)

{

  echo "Want to load $className.\n";

  

  // assuming we can not load class

  // error handling code

  {

    eval('class ' . $className . ' { static function __callStatic($n,
$a) { return false; } }');

    throw new Exception("Unable to load $className.");

  }

}



try

{

  //new MissingClass(); // works as expected

  MissingClass::someFunction();

}

catch (Exception $e)

{

  echo 'CAUGHT: ' . $e->getMessage(), "\n";

}


Previous Comments:
------------------------------------------------------------------------
[2010-09-03 03:26:56] php dot net at phrozenbyte dot de

Same on Ubuntu 10.04 / Apache 2.2 and CLI mode



Test script:

---------------

<?php

spl_autoload_register(

        function($autoload) {

                throw new Exception();

        }

);

try {

        Foo::bar();

} catch(Exception $e) {

        echo "Exception caught\n";

}

?>



Expected result:

----------------

Exception caught



Actual result:

--------------

Fatal error: Class 'Foo' not found in /home/daniel/www/other/php-bug.php
on line 0

------------------------------------------------------------------------
[2010-07-23 09:34:02] madboyka at yahoo dot com

Description:
------------
I've tried to do the following:



1. Wrote and autoload method, that throws an exception.

3. Made a static call on a non-existing class within a try block.



Tried this on windows 7 / Apache 2.2 / PHP 5.3.3.

Test script:
---------------
<?php



function __autoload($class_name) {

        throw new Exception($class_name);

}



try {

        Application::start();

        // new Application(); works fine

} catch (Exception $ex) {

        var_dump($ex);

}



Expected result:
----------------
The script should var_dump() an exception with the Message 'Application'
as it does when instantiating a class.

Actual result:
--------------
The script dies with Fatal error: Class 'Application' not found.


------------------------------------------------------------------------



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

Reply via email to