PHP class_exists always returns true
        Posted  
        
            by 
                Ali
            
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Ali
        
        
        
        Published on 2012-11-07T10:52:12Z
        Indexed on 
            2012/11/07
            11:00 UTC
        
        
        Read the original article
        Hit count: 276
        
php
I have a PHP class that needs some pre-defined globals before the file is included:
File: includes/Product.inc.php
if (class_exists('Product')) {
    return;
}
// This class requires some predefined globals
if ( !isset($gLogger) || !isset($db) || !isset($glob) ) {
    return;
}
class Product
{
   ...
}
The above is included in other PHP files that need to use Product using require_once. Anyone who wants to use Product must however ensure those globals are available, at least that's the idea.
I recently debugged an issue in a function within the Product class which was caused because $gLogger was null. The code requiring the above Product.inc.php had not bothered to create the $gLogger. So The question is how was this class ever included if $gLogger was null?
I tried to debug the code (xdebug in NetBeans), put a breakpoint at the start of Product.inc.php to find out and every time it came to the if (class_exists('Product')) clause it would simply step in and return thus never getting to the global checks. So how was it ever included the first time?
This is PHP 5.1+ running under MAMP (Apache/MySQL). I don't have any auto loaders defined.
© Stack Overflow or respective owner