downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

get_declared_interfaces> <get_class
[edit] Last updated: Fri, 25 May 2012

view this page in

get_declared_classes

(PHP 4, PHP 5)

get_declared_classes返回由已定义类的名字所组成的数组

说明

array get_declared_classes ( void )

返回由当前脚本中已定义类的名字组成的数组。

Note:

在 PHP 4.0.1pl2 中,有三个额外的类存在于返回的数组中:stdClass(在 Zend/zend.c 中定义)、OverloadedTestClass(在 ext/standard/basic_functions.c 中定义)和 Directory(在 ext/standard/dir.c 中定义)。

还需要注意的是额外类的出现依赖于你已编译到 PHP 中的库。这意味着你不能使用这些类名定义自己的类。在附录的 预定义类 部分有预定义类的列表。

Example #1 get_declared_classes() 例子

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

以上例程的输出类似于:

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

参见 class_exists()get_declared_interfaces()

返回值

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

Note:

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.

范例

Example #2 get_declared_classes() example

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

以上例程的输出类似于:

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

参见



get_declared_interfaces> <get_class
[edit] Last updated: Fri, 25 May 2012
 
add a note add a note User Contributed Notes get_declared_classes
dcahh at gmx de 29-Feb-2008 09:23
This function considers only classes and subclasses. Not subsubclasses.

In fact I have code that provides an abstract class and then classes using this abstract class. Further I have subclasses to my concrete classes - which is why my subclasses are not listed within the returned array.
dexen + goofy _ pl 25-Sep-2007 11:32
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
matt at mattsoft dot net 21-Dec-2005 02:58
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
22-Mar-2005 09: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.
matt-php at DONT-SPAM-ME dot bitdifferent dot com 01-Nov-2004 07:41
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
)
Jazeps Basko 07-Feb-2004 11:52
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.
smokey 20-Mar-2003 03:06
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.
Leigh Purdie 23-Jan-2003 01:01
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.

 
show source | credits | stats | sitemap | contact | advertising | mirror sites