From:             black at scene-si dot org
Operating system: debian
PHP version:      5.0.0
PHP Bug Type:     Scripting Engine problem
Bug description:  cant throw exceptions with __autoload (to catch and handle them - 
workaround?)

Description:
------------
I've tried to create an __autoload() function which would throw an
exception if it can't load the class name from a file depending on the
classname i request with the php code.

I couldnt catch the exception with a try/catch clause, because it always
failed (see expected/actual result below).

My workaround was to add this after the first include_once statement
inside the __autoload:

if (!class_exists($classname)) {
  eval("class ".$classname." { }");
}

Afterwards instead of a try/catch clause i used a method_exist call to see
if a general function was defined (one that i require to have).

Reproduce code:
---------------
<?php

function __autoload($classname) {
        if (substr($classname,0,7)=="object_") {
               
@include_once("include/object.".substr($classname,7).".php");
                return;
        }
        @include_once("class.".$classname.".php");
}

try {
  $object = new object_wtf("hello");
} catch (Exception $e) { echo "__autoload failed "; var_dump($object); }


Expected result:
----------------
Output: __autoload failed NULL

Actual result:
--------------
Fatal error: Class 'object_wtf' not found in
/root/monotek/mono/commands/test.php on line 15


-- 
Edit bug report at http://bugs.php.net/?id=29648&edit=1
-- 
Try a CVS snapshot (php4):  http://bugs.php.net/fix.php?id=29648&r=trysnapshot4
Try a CVS snapshot (php5):  http://bugs.php.net/fix.php?id=29648&r=trysnapshot5
Fixed in CVS:               http://bugs.php.net/fix.php?id=29648&r=fixedcvs
Fixed in release:           http://bugs.php.net/fix.php?id=29648&r=alreadyfixed
Need backtrace:             http://bugs.php.net/fix.php?id=29648&r=needtrace
Need Reproduce Script:      http://bugs.php.net/fix.php?id=29648&r=needscript
Try newer version:          http://bugs.php.net/fix.php?id=29648&r=oldversion
Not developer issue:        http://bugs.php.net/fix.php?id=29648&r=support
Expected behavior:          http://bugs.php.net/fix.php?id=29648&r=notwrong
Not enough info:            http://bugs.php.net/fix.php?id=29648&r=notenoughinfo
Submitted twice:            http://bugs.php.net/fix.php?id=29648&r=submittedtwice
register_globals:           http://bugs.php.net/fix.php?id=29648&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=29648&r=php3
Daylight Savings:           http://bugs.php.net/fix.php?id=29648&r=dst
IIS Stability:              http://bugs.php.net/fix.php?id=29648&r=isapi
Install GNU Sed:            http://bugs.php.net/fix.php?id=29648&r=gnused
Floating point limitations: http://bugs.php.net/fix.php?id=29648&r=float

Reply via email to