Bug #74372 [Opn->Fbk]: autoloading file with syntax error uses next autoloader, may hide parse error

[email protected]
Newsgroups php.bugs
Message-ID <[email protected]>
Edit report at https://bugs.php.net/bug.php?id=74372&edit=1

 ID:                 74372
 Updated by:         [email protected]
 Reported by:        lightnb at bellsouth dot net
-Summary:            autoloading file with syntax error attempts to use
                     next autoloader
+Summary:            autoloading file with syntax error uses next
                     autoloader, may hide parse error
-Status:             Open
+Status:             Feedback
 Type:               Bug
 Package:            SPL related
 Operating System:   Ubuntu 16.04
 PHP Version:        7.0.17
 Block user comment: N
 Private report:     N

 New Comment:

I'm seeing the parse error just fine. https://3v4l.org/NSaTZ

Are you catching the exception? Are you making sure to check for previous exceptions? https://3v4l.org/DXGtj


Previous Comments:
------------------------------------------------------------------------
[2017-04-04 20:31:06] lightnb at bellsouth dot net

Description:
------------
Attempting to autoload a class file with a syntax error causes PHP to attempt to use the next autoloader rather than throwing the syntax error.

Test script:
---------------
// Use built in autoloader for 99% of loads
spl_autoload_register(); 
// If that fails, see if it's a rare special case
spl_autoload_register('AutoLoadFallback');

function AutoLoadFallback($ClassName){
    // ... try stuff...
    throw new Exception('Could not autoload the class definition for "'.$ClassName.'"');
}


// Try to load a new widget object
$oWidget = new Widget();

Expected result:
----------------
In this case, assume that the Widget object has a file that the default autoloader can find, but the file contains a syntax error.

The expected result would be a syntax error thrown for the faulty file.

But what actually happens is, when an autoload file is found by the default autoload but a syntax error exists in it, PHP calls the next autoloader in the chain AutoLoadFallback, which of course throws an exception because it only handles cases that the default autoloader can't.

The result is getting an exception thrown by the AutoLoadFallback function, rather than a parse error being thrown when the default autoloader tries to load the class. This blocks me from seeing the real error and line number.

If I comment out the spl_autoload_register('AutoLoadFallback'); line, it throws a parse error per normal.



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



--
Edit this bug report at https://bugs.php.net/bug.php?id=74372&edit=1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.