Edit report at https://bugs.php.net/bug.php?id=52339&edit=1
ID: 52339
Comment by: aden at fraserjilani dot com
Reported by: dangerous dot ben at gmail dot com
Summary: SPL autoloader breaks class_exists()
Status: Re-Opened
Type: Bug
Package: SPL related
Operating System: any (debian)
PHP Version: 5.3.3RC2
Block user comment: N
Private report: N
New Comment:
v5.5.9 - still broken.
Previous Comments:
------------------------------------------------------------------------
[2014-10-08 06:51:01] john dot fragkoulis at gmail dot com
v5.5.3 still broken
------------------------------------------------------------------------
[2014-01-13 12:34:02] matthew dot bonner at gmail dot com
Still broke in 5.4 and 5.5 3 years on!
------------------------------------------------------------------------
[2013-01-17 13:41:30] php at maisqi dot com
This is clearly a bug. We're testing if a class exists not asserting it.
There's seam to be a patch for this. Any chance it will be accepted?
------------------------------------------------------------------------
[2012-11-24 20:29:04] ciantic at oksidi dot com
Is this bug still happening in PHP5.4 and greater? I'm using 5.3.8.
If one uses class_exists it should never throw error, only true or false. It makes
no sense otherwise. This is one of those where setting of some other application
can totally broke functionality elsewhere. Should everyone using class_exists
catch try LogicException too? I'd argue not.
Though the workaround (empty function for spl) is kind of nice, as dangerous dot
ben mentioned.
------------------------------------------------------------------------
[2012-08-08 16:18:39] kilbyc at bellsouth dot net
Even worse. The no arg register is inconsistent.
<?php
print_r(class_exists('asdfasdf'));//no error, just false.
spl_autoload_register();
print_r(class_exists('asdfasdf'));//LogicException
?>
<?php
print_r(class_exists('asdfasdf'));//no error, just false.
spl_autoload_register('spl_autoload');
spl_autoload_unregister('spl_autoload');
spl_autoload_register();
print_r(class_exists('asdfasdf'));//no error, just false.
?>
If the autoload stack is empty by the time the no arg registered is called, how can it function
differently than if the autoload stack has been emptied by the time the no arg register is called?
This is nonsensical behavior, and manual for spl_autoload say nothing about it throwing. Let alone
LogicException. I would have expected this to be a RuntimeException. As it depends on the specific
environment it is run in as to whether or not spl_autoload will find something.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=52339
--
Edit this bug report at https://bugs.php.net/bug.php?id=52339&edit=1