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

 ID:                 65255
 Comment by:         ryan dot brothers at gmail dot com
 Reported by:        ryan dot brothers at gmail dot com
 Summary:            exception not catchable when thrown from autoload in
                     an extended class
 Status:             Not a bug
 Type:               Bug
 Package:            Scripting Engine problem
 Operating System:   Linux
 PHP Version:        5.5.0
 Block user comment: N
 Private report:     N

 New Comment:

Thank you for your help.  Why does it matter if the class was declared 
literally in the try/catch block?  The documentation states "exceptions thrown 
in the __autoload function can be caught in the catch block".  It works for the 
base class, but not extended classes.

Other exceptions thrown outside of a try/catch always propagate back to the 
caller's try/catch such as the below.  In these examples, the exception is 
caught, but the exception is thrown outside of the literal try/catch.

<?php
function __autoload($class)
{
    throw new Exception('abcd');
}

try
{
    test1::go();
}
catch (Exception $e)
{
    echo 'caught';
    exit;
}

=================================================

<?php
function test()
{
     throw new Exception('abcd');
}

try
{
    test();
}
catch (Exception $e)
{
    echo 'caught';
    exit;
}

=================================================

<?php
class test1
{
    public static function go()
    {
        throw new Exception('abcd');
    }
}

try
{
    test1::go();
}
catch (Exception $e)
{
    echo 'caught';
    exit;
}


Previous Comments:
------------------------------------------------------------------------
[2013-07-14 03:17:40] larue...@php.net

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

try the following example, you may found why this is expected:
<?php
function __autoload($class)
{
    throw new Exception('abcd');
}

try
{
    class test1 extends test2
    {
        public static function go()
        {

        }
    }
    test1::go();
}
catch (Exception $e)
{
    echo 'caught';
    exit;
}

------------------------------------------------------------------------
[2013-07-12 19:43:37] ryan dot brothers at gmail dot com

Description:
------------
This issue may be the same issue as bug 65254 that I just submitted.  The 
following script throws a Fatal Error rather than catching the exception.


Test script:
---------------
<?php
function __autoload($class)
{
    throw new Exception('abcd');
}

class test1 extends test2
{
    public static function go()
    {

    }
}

try
{
    test1::go();
}
catch (Exception $e)
{
    echo 'caught';
    exit;
}

Expected result:
----------------
caught

Actual result:
--------------
Fatal error: Uncaught exception 'Exception' with message 'abcd' in 
/tmp/test.php:4
Stack trace:
#0 /tmp/test.php(8): __autoload('test2')
#1 {main}
  thrown in /tmp/test.php on line 4



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



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

Reply via email to