Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : Class/Object Functions : class_exists

class_exists

Checks if the class has been defined (PHP 4, PHP 5)
bool class_exists ( string class_name [, bool autoload] )

Example 373. class_exists() example

<?php
// Check that the class exists before trying to use it
if (class_exists('MyClass')) {
   
$myclass = new MyClass();
}

?>

Example 374. autoload parameter example

<?php
function __autoload($class)
{
   include(
$class . '.php');

   
// Check to see whether the include declared the class
   
if (!class_exists($class, false)) {
       
trigger_error("Unable to load class: $class", E_USER_WARNING);
   }
}

if (
class_exists('MyClass')) {
   
$myclass = new MyClass();
}

?>

Related Examples ( Source code ) » class_exists


Code Examples / Notes » class_exists

peterw

Using require_once() would help against including a class file more than once.

cristiano

This can be veeeery usefull if you use classes that uses other classes, which can be used in your front end. In other words, when you lost the control of which classes are declared in which point of the application, that can generate the "Cannot redeclare class". Use like
<?php
if ( !class_exists( "YourClass" ) ) {
   class YourClass {
       //your code
   }
}
?>
Thats it... Resolve all your problems =)


frayja

Like someone else pointed out class_exists() is case-INsensitive.
Using in_array() which is case-sensitive, the following function is a case-sensitive version of class_exists().
<?php
function class_exists_sensitive( $classname )
{
  return ( class_exists( $classname ) && in_array( $classname, get_declared_classes() ) );
}
?>


josh

Just to note, class names appear to be case INsensitive. (At least at the time of writing in PHP 4.3.9). Take the following example:
<?php
class Foo { var $myVar; }
class Foo_Bar extends Foo { var $myVar2;}
echo class_exists('Foo'); //true
echo class_exists('foo'); //true
echo class_exists('Foo_Bar'); // true
echo get_class_parent('Foo_Bar'); // foo (NOTE: NOT Foo!)
?>


06-apr-2004 01:04

Just a note that at least PHP 4.3.1 seems to crash under some situations if you call class_exists($foo) where $foo is an array (that is, the calling code is incorrect but the error recovery is far from perfect).

andrey

In 5.0.0 and 5.0.1 there was no interface_exists() and in these versions class_exists() used to return TRUE for known interfaces. Starting 5.0.2 this is no more.

anonymous

If you have a directory of classes you want to create. (Modules in my instance)... you can do it like that
<?php
if (is_dir($this->MODULE_PATH) && $dh = opendir($this->MODULE_PATH)) {
  while (($file = readdir($dh)) !== false) {
     if (preg_match("/(Mod[a-zA-Z0-9]+).php/", $file, $matches)>0) {
        // include and create the class  
        require_once($this->MODULE_PATH."/".$file);
        $modules[] = new $matches[1]();
     }
  }
} else {
  exit;
}
?>
//---
Here the rule is that all modules are on the form
ModModulename.php and that the class has the same name as the file.
The $modules array has all the classes initialized after this code


spamless_blair

I have a script that includes various class libraries depending on what is contained in the constant _INCLUDE_LIST which is a comma-delimited string.
define('_INCLUDE_LIST', 'CORE, LIB_DATA, LIB_EMAIL');
I use class_exists() to determine if a class definition has been included before creating an instance of it.
if(class_exists('CMySQLConnection')) $oData = new CMySQLConnection;
Hope it is helpful for someone!
-Jason Garber
IonZoft.com


Change Language


Follow Navioo On Twitter
call_user_method_array
call_user_method
class_exists
get_class_methods
get_class_vars
get_class
get_declared_classes
get_declared_interfaces
get_object_vars
get_parent_class
interface_exists
is_a
is_subclass_of
method_exists
property_exists
eXTReMe Tracker