If you want to combat many class includes effectively, define your own autoloader function and spl_autoload_register() that autoloader.
class_exists
(PHP 4, PHP 5)
class_exists — Verifica si la clase ha sido definida
Descripción
bool class_exists
( string $nombre_clase
[, bool $autocargar
] )
Esta función verifica si la clase dada ha sido definida o no.
Lista de parámetros
- nombre_clase
-
El nombre de la clase. El nombre es coincidido de manera insensible a mayúsculas y minúsculas.
- autocargar
-
Indica si ha de llamarse __autoload o no de forma predeterminada. Su valor predeterminado es TRUE.
Valores retornados
Devuelve TRUE si nombre_clase es una clase definida, FALSE de lo contrario.
Registro de cambios
| Versión | Descripción |
|---|---|
| 5.0.2 | Ya no devuelve TRUE para interfaces definidas. En ese caso se debe usar interface_exists(). |
| 5.0.0 | El parámetro autocargar fue agregado. |
Ejemplos
Example #1 Ejemplo de class_exists()
<?php
// Verificar que la clase exista antes de usarla
if (class_exists('MiClase')) {
$mi_clase = new MiClase();
}
?>
Example #2 Ejemplo del parámetro autocargar
<?php
function __autoload($clase)
{
include($clase . '.php');
// Verificar si la sentencia include declaró la clase
if (!class_exists($clase, false)) {
trigger_error("No es posible cargar la clase: $clase", E_USER_WARNING);
}
}
if (class_exists('MiClase')) {
$mi_clase = new MiClase();
}
?>
class_exists
Radek @ cz
06-May-2008 03:43
06-May-2008 03:43
richard at richard-sumilang dot com
27-Mar-2008 09:56
27-Mar-2008 09:56
[ >= 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";
Frayja
01-Jun-2006 10:42
01-Jun-2006 10:42
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() ) );
}
?>
06-Apr-2004 02: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).
anonymous at somewhere dot tld
17-Jul-2003 09:20
17-Jul-2003 09:20
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
cristiano at aspatech dot com dot br
24-Jun-2002 08:36
24-Jun-2002 08:36
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 =)
spamless_blair at nb dot net
09-Oct-2001 10:48
09-Oct-2001 10:48
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
