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:

Nevermind, I see the issue now and why it's expected behavior.  The autoload 
gets called when the class is declared rather than when the class is first 
called.  I'll see if your fix in bug 65254 resolves the issue I was having.  
Thanks again for your help.


Previous Comments:
------------------------------------------------------------------------
[2013-07-14 13:22:01] ryan dot brothers at gmail dot com

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;
}

------------------------------------------------------------------------
[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