预定义类

本节列出标准的预定义类。各种扩展库定义了其它类,其说明在各自的参考文档中。

标准类

这些类由一些内建在 PHP 中的标准函数定义。

Directory
dir() 创建。
stdClass
使用类型转换为对象或者各种标准函数创建的通用空类。
__PHP_Incomplete_Class
可能由 unserialize() 创建。
Exception
ErrorException
php_user_filter
Closure
预定义的 final 类 Closure,它可以用于实现 匿名函数
Generator
预定义的 final 类 Generator,它可以用于实现 生成器
ArithmeticError
AssertionError
DivisionByZeroError
Error
Throwable
ParseError
TypeError

特殊的类

以下这些标识符由于它们有特殊的用处,因此不可作为类名

self
当前类
static
运行时的当前类
parent
父级类
添加备注

用户贡献的备注 6 notes

up
22
spark at limao dot com dot br
13 years ago
if you want a Dynamic class you can extend from, add atributes AND methods on the fly you can use this:<?php    class Dynamic extends stdClass{        public function __call($key,$params){            if(!isset($this->{$key})) throw new Exception("Call to undefined method ".get_class($this)."::".$key."()");            $subject = $this->{$key};            call_user_func_array($subject,$params);        }    }?>this will accept both arrays, strings and Closures:<?php    $dynamic->myMethod = "thatFunction";    $dynamic->hisMethod = array($instance,"aMethod");    $dynamic->newMethod = array(SomeClass,"staticMethod");    $dynamic->anotherMethod = function(){        echo "Hey there";    };?>then call them away =D
up
18
wyattstorch42 at outlook dot com
11 years ago
If you call var_export() on an instance of stdClass, it attempts to export it using ::__set_state(), which, for some reason, is not implemented in stdClass.However, casting an associative array to an object usually produces the same effect (at least, it does in my case). So I wrote an improved_var_export() function to convert instances of stdClass to (object) array () calls. If you choose to export objects of any other class, I'd advise you to implement ::__set_state().<?php/** * An implementation of var_export() that is compatible with instances * of stdClass. * @param mixed $variable The variable you want to export * @param bool $return If used and set to true, improved_var_export() *     will return the variable representation instead of outputting it. * @return mixed|null Returns the variable representation when the *     return parameter is used and evaluates to TRUE. Otherwise, this *     function will return NULL. */function improved_var_export ($variable, $return = false) {    if ($variable instanceof stdClass) {        $result = '(object) '.improved_var_export(get_object_vars($variable), true);    } else if (is_array($variable)) {        $array = array ();        foreach ($variable as $key => $value) {            $array[] = var_export($key, true).' => '.improved_var_export($value, true);        }        $result = 'array ('.implode(', ', $array).')';    } else {        $result = var_export($variable, true);    }    if (!$return) {        print $result;        return null;    } else {        return $result;    }}// Example usage:$obj = new stdClass;$obj->test = 'abc';$obj->other = 6.2;$obj->arr = array (1, 2, 3);improved_var_export((object) array (    'prop1' => true,    'prop2' => $obj,    'assocArray' => array (        'apple' => 'good',        'orange' => 'great'    )));/* Output:(object) array ('prop1' => true, 'prop2' => (object) array ('test' => 'abc', 'other' => 6.2, 'arr' => array (0 => 1, 1 => 2, 2 => 3)), 'assocArray' => array ('apple' => 'good', 'orange' => 'great'))*/?>Note: This function spits out a single line of code, which is useful to save in a cache file to include/eval. It isn't formatted for readability. If you want to print a readable version for debugging purposes, then I would suggest print_r() or var_dump().
up
10
xzero at elite7hackers dot net
7 years ago
There comes improved version of amazing snippet posted by (spark at limao dot com dot br)  which allows dynamic methods generations and works as versatile extension of StdClass:This one is faster, optimised for closures, and will work only with closures. Compatible: >= PHP 5.6<?phpclass Dynamic extends \stdClass{    public function __call($key, $params)    {        if ( ! isset($this->{$key})) {            throw new Exception("Call to undefined method " . __CLASS__ . "::" . $key . "()");        }        return $this->{$key}->__invoke(... $params);    }}?>Usage examples:<?php$dynamic                = new Dynamic();$dynamic->anotherMethod = function () {    echo "Hey there";};$dynamic->randomInt     = function ($min, $max) {    return mt_rand($min, $max); // random_int($min, $max); // <-- PHP7+};var_dump(    $dynamic->randomInt(1, 11),    $dynamic->anotherMethod());?>This will accept arrays, strings and Closures but is a bit slower due to call_user_func_array<?phpclass Dynamic extends \stdClass{    public function __call($key, $params)    {        if ( ! isset($this->{$key})) {            throw new Exception("Call to undefined method " . __CLASS__ . "::" . $key . "()");        }        return call_user_func_array($this->{$key}, $params);    }}?>Usage examples:<?php$dynamic                = new Dynamic();$dynamic->myMethod      = "thatFunction";$dynamic->hisMethod     = array($dynamic, "randomInt");$dynamic->newMethod     = array(SomeClass, "staticMethod");$dynamic->anotherMethod = function () {    echo "Hey there";};$dynamic->randomInt     = function ($min, $max) {    return mt_rand($min, $max); // random_int($min, $max); // <-- PHP7+};var_dump(    $dynamic->randomInt(1, 11),    $dynamic->anotherMethod(),    $dynamic->hisMethod());?>
up
6
unknown
23 years ago
It's handy to have a array of the reserved classes.....
var_dump (get_declared_classes ());
up
2
xzero at elite7hackers dot net
7 years ago
There comes improved version of amazing snippet posted by which allows dynamic methods generations and works as versatile extension of StdClass:This one is faster, optimised for closures, and will work only with closures. Compatible: >= PHP 5.6<?phpclass Dynamic extends \stdClass{    public function __call($key, $params)    {        if ( ! isset($this->{$key})) {            throw new Exception("Call to undefined method " . __CLASS__ . "::" . $key . "()");        }        return $this->{$key}->__invoke(... $params);    }}?>Usage examples:<?php$dynamic                = new Dynamic();$dynamic->anotherMethod = function () {    echo "Hey there";};$dynamic->randomInt     = function ($min, $max) {    return mt_rand($min, $max); // random_int($min, $max); // <-- PHP7+};var_dump(    $dynamic->randomInt(1, 11),    $dynamic->anotherMethod());?>This will accept arrays, strings and Closures but is a bit slower due to call_user_func_array<?phpclass Dynamic extends \stdClass{    public function __call($key, $params)    {        if ( ! isset($this->{$key})) {            throw new Exception("Call to undefined method " . __CLASS__ . "::" . $key . "()");        }        return call_user_func_array($this->{$key}, $params);    }}?>Usage examples:<?php$dynamic                = new Dynamic();$dynamic->myMethod      = "thatFunction";$dynamic->hisMethod     = array($dynamic, "randomInt");$dynamic->newMethod     = array(SomeClass, "staticMethod");$dynamic->anotherMethod = function () {    echo "Hey there";};$dynamic->randomInt     = function ($min, $max) {    return mt_rand($min, $max); // random_int($min, $max); // <-- PHP7+};var_dump(    $dynamic->randomInt(1, 11),    $dynamic->anotherMethod(),    $dynamic->hisMethod());?>
up
3
Ashley Dambra
11 years ago
Here a simple class that allow to set anonymous function. It's an optimised class of stdClass.<?phpclass stdObject {    public function __construct(array $arguments = array()) {        if (!empty($arguments)) {            foreach ($arguments as $property => $argument) {                if ($argument instanceOf Closure) {                    $this->{$property} = $argument;                } else {                    $this->{$property} = $argument;                }            }        }    }    public function __call($method, $arguments) {        if (isset($this->{$method}) && is_callable($this->{$method})) {            return call_user_func_array($this->{$method}, $arguments);        } else {            throw new Exception("Fatal error: Call to undefined method stdObject::{$method}()");        }    }}$person = new stdObject(array(    "name" => "nick",    "age" => 23,    "friends" => array("frank", "sally", "aaron"),    "sayHi" => function() {        return "Hello there";    }));$person->sayHi2 = function() {    return "Hello there 2";};$person->test = function() {    return "test";};var_dump($person->name, $person->test(), $person->sayHi2());?>
To Top