class_exists

(PHP 4, PHP 5)

class_existsChecks if the class has been defined

Description

bool class_exists ( string $class_name [, bool $autoload = true ] )

This function checks whether or not the given class has been defined.

Parameters

class_name

The class name. The name is matched in a case-insensitive manner.

autoload

Whether or not to call __autoload by default.

Return Values

Returns TRUE if class_name is a defined class, FALSE otherwise.

Changelog

Version Description
5.0.2 No longer returns TRUE for defined interfaces. Use interface_exists().
5.0.0 The autoload parameter was added.

Examples

Example #1 class_exists() example

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

?>

Example #2 autoload parameter example

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

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

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

?>

See Also

Коментарии

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
2003-07-17 15:20:31
http://php5.kiev.ua/manual/ru/function.class-exists.html
[ >= PHP 5.3]

If you are checking if a class exists that is in a specific namespace then you have to pass in the full path to the class:

echo (class_exists("com::richardsumilang::common::MyClass")) ? "Yes" : "No";
2008-03-27 02:56:55
http://php5.kiev.ua/manual/ru/function.class-exists.html
Автор:
If you recursively load several classes inside an autoload function (or mix manual loading and autoloading), be aware that class_exists() (as well as get_declared_classes()) does not know about classes previously loaded during the *current* autoload invocation.

Apparently, the internal list of declared classes is only updated after the autoload function is completed.
2010-04-28 07:21:39
http://php5.kiev.ua/manual/ru/function.class-exists.html
I'm running PHP 5.3.4 on Windows 7 and had some difficulty autoloading classes using class_exists(). In my case, when I checked for the class and it didn't exist, class_exists automatically threw a system Exception. I was also throwing my own exception resulting in an uncaught exception.

<?php
/**
 * Set my include path here
 */
$include_path = array( '/include/this/dir''/include/this/one/too' );
set_include_path$include_path );
spl_autoload_register();
/**
 * Assuming I have my own custom exception handler (MyException) let's
 * try to see if a file exists.
 */
try {
    if( ! 
file_exists'myfile.php' ) ) {
        throw new 
MyException('Doh!');
    }
    include( 
'myfile.php' );
}
catch( 
MyException $e ) {
    echo 
$e->getMessage();
}
/**
 * The above code either includes myfile.php or throws the new MyException
 * as expected. No problem right? The same should be true of class_exists(), 
 * right? So then...
 */
$classname 'NonExistentClass';
try {
    if( ! 
class_exists$classname ) ) {
        throw new 
MyException('Double Doh!');
    }
   
$var = new $classname();
}
catch( 
MyException $e ) {
    echo 
$e->getMessage();
}
/**
* Should throw a new instance of MyException. But instead I get an
* uncaught LogicException blah blah blah for the default Exception
* class AND MyException. I only catch MyException so we've got on
* uncaught resulting in the dreaded LogicException error.
*/
?>

By registering an additional autoload handler function that did nothing, I was able to stop throwing the extra Exception and only throw my own.

<?php
/**
 * Set my include path here
 */
$include_path = array( '/include/this/dir''/include/this/one/too' );
set_include_path$include_path );
spl_autoload_register();
spl_autoload_register'myAutoLoad' ); // Add these two and no worries...
function myAutoLoad() {}
/**
 * By registering the additional custom autoload function that does nothing
 * class_exists() returns only boolean and does NOT throw an uncaught Exception
 */
?>

Found this buried in some search results. I don't remember the page URL but if it would have been here it might have saved me some time!
2012-02-14 08:47:11
http://php5.kiev.ua/manual/ru/function.class-exists.html
If you are using aliasing to import namespaced classes, take care that class_exists will not work using the short, aliased class name - apparently whenever a class name is used as string, only the full-namespace version can be used

use a\namespaced\classname as coolclass;

class_exists( 'coolclass' ) => false
2013-10-31 19:28:39
http://php5.kiev.ua/manual/ru/function.class-exists.html
Hi guys!
Be careful  and don't forget about second boolean argument $autoload (TRUE by default) when check exists class after spl_autoload_register. Propose short example
file second.php
<?php
class Second {}
?>
file index.php
<?php
class First
{
    function 
first($class$bool) {
       
spl_autoload_register( function($class) {
            require 
strtolower($class) . '.php';
        });
        echo 
class_exists($class$bool)?'Exist!!!!':'Not exist!';
    }
}

new 
First($class 'Second'$bool true); //Exist!!!!
new First($class 'Second'$bool false); //Not exist!
?>
Because __autoload executing much earlier than boolean returned, imho..
2013-12-09 16:43:23
http://php5.kiev.ua/manual/ru/function.class-exists.html
Beware: class_exists is case-INsensitive, as is class instantiation.

php > var_dump(class_exists("DomNode"));
bool(true)
php > var_dump(class_exists("DOMNode"));
bool(true)
php > var_dump(class_exists("DOMNodE"));
bool(true)
php > $x = new DOMNOdE();
php > var_dump(get_class($x));
string(7) "DOMNode"

(tested with PHP 5.5.10 on Linux)

This can cause some headaches in correlating class names to file names, especially on a case-sensitive file system.
2014-04-06 20:55:57
http://php5.kiev.ua/manual/ru/function.class-exists.html
Note: class_exists() check only classes! 
<?php
interface DemoInterface {};
var_dump(class_exists('DemoInterface')); // false
trait DemoTrait {};
var_dump(class_exists('DemoTrait')); // false
class DemoClass {};
var_dump(class_exists('DemoClass')); // true
?>

Common function:
<?php
/**
  * Checks if the class/trait/interface has been defined.
  *
  * @param string $name The case-insensitive name of class/trait/interface
  * @param bool $autoload Whether to call spl_autoload()
  * @return bool
  */
function structure_exists(string $namebool $autoload true): bool
{
       return 
class_exists($name$autoload)
              || 
interface_exists($name$autoload)
              || 
trait_exists($name$autoload);
}
?>
2020-09-16 09:54:19
http://php5.kiev.ua/manual/ru/function.class-exists.html
Beware that `\class_exists()` returns `true` for enums.

<?php
enum Testint
{
    case 
One 1;
    case 
Two 2;
}

\var_dump(\class_exists(Test::class)); // bool(true)
?>

Having this in mind, the correct check for a class existence is:

<?php
function is_class_exist(string $class): bool
{
    return 
\class_exists($class) && !\enum_exists($class);
}
?>
2024-06-26 15:21:03
http://php5.kiev.ua/manual/ru/function.class-exists.html

    Поддержать сайт на родительском проекте КГБ