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: 211

Filed under:

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

Related posts about php