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



PHP : Function Reference : Class/Object Functions : get_declared_classes

get_declared_classes

Returns an array with the name of the defined classes (PHP 4, PHP 5)
array get_declared_classes ( )

Gets the declared classes.

Return Values

Returns an array of the names of the declared classes in the current script.

Note:

In PHP 4.0.1, three extra classes are returned at the beginning of the array: stdClass (defined in Zend/zend.c), OverloadedTestClass (defined in ext/standard/basic_functions.c) and Directory (defined in ext/standard/dir.c).

Also note that depending on what extensions you have compiled or loaded into PHP, additional classes could be present. This means that you will not be able to define your own classes using these names. There is a list of predefined classes in the Predefined Classes section of the appendices.

Examples

Example 378. get_declared_classes() example

<?php
print_r
(get_declared_classes());
?>

The above example will output something similar to:

Array
(
   [0] => stdClass
   [1] => __PHP_Incomplete_Class
   [2] => Directory
)


Related Examples ( Source code ) » get_declared_classes


Code Examples / Notes » get_declared_classes

smokey

you cannot remove them. they are "defined", which happens when the class is being loaded from the parser. you just deleted an instance of a class.

ben

To easily check the values, just run:
print_r (get_declared_classes());


matt-php

The array returned by this function will be in the order the classes were defined / included / required and this order does not appear to change.
For example:
<?PHP
//define classone
class classone { }
//define classtwo
class classtwo { }
//This will show X classes (built-ins, extensions etc) with
//classone and classtwo as the last two elements
print_r(get_declared_classes());
//define classthree
class classthree { }
//...and four
class classfour { }
//Shows the same result as before with class three and four appended
print_r(get_declared_classes());
?>
Output:
Array
(
  [0] => stdClass
  [1] .... other defined classes....
  [10] => classone
  [11] => classtwo
)
and...
Array
(
  [0] => stdClass
  [1] .... other defined classes....
  [10] => classone
  [11] => classtwo
  [12] => classthree
  [13] => classfour
)


dexen + goofy _ pl

Summary:
* in PHP 5.1 class names have case preserved
* contrary, in PHP 4.4 class names are downcased, withe exception of a few build-in ones
The get_declared_classes() funcition returns the list of names with case preserved, as of PHP 5.1 series (prolly 5.0 too, but i have no way to test it right now). Since PHP generally is caseless in regard to names of classes, this may come at a surprise. Also, this could potentially break older code asssuming downcased list.
Take extra care when  checking for existence of a class. Following example is, potentially, error prone: <?php in_array( $className, $classget_declared_classes() ) ?>
A sure-fire (while slower) way would be to iterate over the array and normalize case to, say, lower:
<?php
$exists = FALSE;
$className = strtolower( $className );
foreach ( get_declared_classes() as $c ) {
if ( $className === strtolower( $c ) ) {
$exists = TRUE;
break;
}
}?>
Optimization of the above snippet is left as a simple excercise to the reader ;)
-- dexen deVries


22-mar-2005 05:16

Regarding note of 3-21:
<?php
class myclass {}
$class = 'myclass';
$instance = new $class();
?>
This function could also be used to determine the names of classes defined in a particular file by calling it before and after include. It's hardly a pointless function.


leigh purdie

Note that classes remain in the declared list, even when their associated object is undef'd.
eg:
   $object = new MyClass;
   print_r(get_declared_classes());
   undef($object);
   print_r(get_declared_classes());
- the two print_r's will return the same data.
Not sure how to remove a class from the declared list.


jazeps basko

In PHP5, you don't get declared interfaces by calling this function!!!
To get interfaces you should use get_declared_interfaces(). However, to check if an interface is already defined, you should use class_exists()! This is strange, but PHP team does not think so.


matt

classes can't be unloaded. probably not very practical to implement that in a future version. I wouldn't go out of my way to do it if I were zend. you're better off finding a workaround. it's better programming technique to find a way around having to do that anyway.
http://www.zend.com/zend/week/week223.php#Heading10


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