__autoload

尝试加载未定义的类

Warning

This feature has been DEPRECATED as of PHP 7.2.0. Relying on this feature is highly discouraged.

说明

void __autoload ( string $class )

你可以通过定义这个函数来启用类的自动加载

参数

class
待加载的类名。

返回值

没有返回值。

参见

  • spl_autoload_register

call_user_method_array

以参数列表的数组,调用用户方法

Warning

This function was DEPRECATED in PHP 4.1.0, and REMOVED in PHP 7.0.0.

Alternatives to this function include:

  • call_user_func_array

说明

mixed call_user_method_array ( string $method_name , object &$obj , array $params )

参数

method_name
要调用的方法名称。

obj
要调用的 method_name 所在的对象 object

params
数组形式的一组参数。

范例

示例 #1 代替 call_user_method_array

<?php
call_user_func_array(array($obj, $method_name), $params);
?>

参见

  • call_user_func_array
  • call_user_func

call_user_method

对特定对象调用用户方法

Warning

This function was DEPRECATED in PHP 4.1.0, and REMOVED in PHP 7.0.0.

Alternatives to this function include:

  • call_user_func

说明

mixed call_user_method ( string $method_name , object &$obj [, mixed $parameter [, mixed $... ]] )

参数

method_name
要调用的方法名称。

obj
要调用的 method_name 所在的对象 object

parameter ...
可选参数

范例

示例 #1 代替 call_user_method

<?php
call_user_func(array($obj, $method_name), $parameter /* , ... */);
?>

参见

  • call_user_func_array
  • call_user_func

class_alias

为一个类创建别名

说明

bool class_alias ( string $original , string $alias [, bool $autoload = TRUE ] )

基于用户定义的类 original 创建别名 alias。 这个别名类和原有的类完全相同。

参数

original
原有的类。

alias
类的别名。

autoload
如果原始类没有加载,是否使用自动加载(autoload)。

返回值

成功时返回 TRUE, 或者在失败时返回 FALSE

范例

示例 #1 class_alias 例子

<?php

class foo { }

class_alias('foo', 'bar');

$a = new foo;
$b = new bar;

// the objects are the same
var_dump($a == $b, $a === $b);
var_dump($a instanceof $b);

// the classes are the same
var_dump($a instanceof foo);
var_dump($a instanceof bar);

var_dump($b instanceof foo);
var_dump($b instanceof bar);

?>

以上例程会输出:

bool(true)
bool(false)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)

参见

  • get_parent_class
  • is_subclass_of

class_exists

检查类是否已定义

说明

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

检查指定的类是否已定义。

参数

class_name
类名。名字的匹配是不分区大小写的。

autoload
是否默认调用 __autoload

返回值

如果由 class_name 所指的类已经定义,此函数返回 TRUE,否则返回 FALSE

更新日志

版本说明
5.0.2不再为已定义的 interface 返回 TRUE。请使用 interface_exists

范例

示例 #1 class_exists 例子

<?php
// 使用前检查类是否存在
if (class_exists('MyClass')) {
    $myclass = new MyClass();
}

?>

示例 #2 autoload parameter 例子

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

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

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

?>

参见

  • function_exists
  • interface_exists
  • get_declared_classes

get_called_class

后期静态绑定("Late Static Binding")类的名称

说明

string get_called_class ( void )

获取静态方法调用的类名。

返回值

返回类的名称,如果不是在类中调用则返回 FALSE

范例

示例 #1 get_called_class 的使用

<?php

class foo {
    static public function test() {
        var_dump(get_called_class());
    }
}

class bar extends foo {
}

foo::test();
bar::test();

?>

以上例程会输出:

string(3) "foo"
string(3) "bar"

参见

  • get_parent_class
  • get_class
  • is_subclass_of

get_class_methods

返回由类的方法名组成的数组

说明

array get_class_methods ( mixed $class_name )

返回由类的方法名组成的数组。

参数

class_name
类名或者对象实例。

返回值

返回由 class_name 指定的类中定义的方法名所组成的数组。如果出错,则返回 NULL

范例

示例 #1 get_class_methods 示例

<?php

class myclass {
    // constructor
    function myclass()
    {
        return(true);
    }

    // method 1
    function myfunc1()
    {
        return(true);
    }

    // method 2
    function myfunc2()
    {
        return(true);
    }
}

$class_methods = get_class_methods('myclass');
// or
$class_methods = get_class_methods(new myclass());

foreach ($class_methods as $method_name) {
    echo "$method_name\n";
}

?>

以上例程会输出:

myclass
myfunc1
myfunc2

参见

  • get_class
  • get_class_vars
  • get_object_vars

get_class_vars

返回由类的默认属性组成的数组

说明

array get_class_vars ( string $class_name )

返回由类的默认公有属性组成的关联数组。

参数

class_name
类名

返回值

Returns an associative array of declared properties visible from the current scope, with their default value. The resulting array elements are in the form of varname => value. In case of an error, it returns FALSE.

更新日志

版本说明
5.0.3get_class_vars will only return the properties that can be accessed from the current scope.
5.0.2Calling get_class_vars will now expose all the properties as an array, unlike previous behaviour where protected and private properties were prefixed with nul bytes.
5.0.1Calling get_class_vars will expose all properties, as when converting an object to a class.

范例

示例 #1 get_class_vars example

<?php

class myclass {

    var $var1; // this has no default value...
    var $var2 = "xyz";
    var $var3 = 100;
    private $var4;

    // constructor
    function __construct() {
        // change some properties
        $this->var1 = "foo";
        $this->var2 = "bar";
        return true;
    }

}

$my_class = new myclass();

$class_vars = get_class_vars(get_class($my_class));

foreach ($class_vars as $name => $value) {
    echo "$name : $value\n";
}

?>

以上例程会输出:

var1 :
var2 : xyz
var3 : 100

示例 #2 get_class_vars and scoping behaviour

<?php
function format($array)
{
    return implode('|', array_keys($array)) . "\r\n";
}

class TestCase
{
    public $a    = 1;
    protected $b = 2;
    private $c   = 3;

    public static function expose()
    {
        echo format(get_class_vars(__CLASS__));
    }
}

TestCase::expose();
echo format(get_class_vars('TestCase'));
?>

以上例程会输出:

// 5.0.0
a| * b| TestCase c
a| * b| TestCase c

// 5.0.1 - 5.0.2
a|b|c
a|b|c

// 5.0.3 +
a|b|c
a

参见

  • get_class_methods
  • get_object_vars

get_class

返回对象的类名

说明

string get_class ([ object $object = NULL ] )

返回对象实例 object 所属类的名字。

参数

object
要测试的对象。如果在类里,此参数可以省略。

返回值

返回对象实例 object 所属类的名字。 如果 object 不是一个对象则返回 FALSE

如果在一个类里,省略了参数 object, 则返回当前所在类的名称。

如果 object 是命名空间中某个类的实例,则会返回带上命名空间的类名。

错误/异常

如果用其他类型调用 get_class,而不是一个对象的话,就会产生 E_WARNING 级别的错误。

更新日志

版本说明
5.3.0 起object 默认参数现在是 NULL ,所以,现在传入 NULLobject 参数时,和没传参数的结果一样。

范例

示例 #1 使用 get_class

<?php

class foo {
    function name()
    {
        echo "My name is " , get_class($this) , "\n";
    }
}

// create an object
$bar = new foo();

// external call
echo "Its name is " , get_class($bar) , "\n";

// internal call
$bar->name();

?>

以上例程会输出:

Its name is foo
My name is foo

示例 #2 超类中使用 get_class

<?php

abstract class bar {
    public function __construct()
    {
        var_dump(get_class($this));
        var_dump(get_class());
    }
}

class foo extends bar {
}

new foo;

?>

以上例程会输出:

string(3) "foo"
string(3) "bar"

示例 #3 命名空间中的类使用 get_class

<?php

namespace Foo\Bar;

class Baz {
    public function __construct()
    {

    }
}

$baz = new \Foo\Bar\Baz;

var_dump(get_class($baz));
?>

以上例程会输出:

string(11) "Foo\Bar\Baz"

参见

  • get_called_class
  • get_parent_class
  • gettype
  • is_subclass_of

get_declared_classes

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

说明

array get_declared_classes ( void )

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

返回值

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

Note:

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

范例

示例 #1 get_declared_classes 例子

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

以上例程的输出类似于:

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

参见

  • class_exists
  • get_declared_interfaces
  • get_defined_functions

get_declared_interfaces

返回一个数组包含所有已声明的接口

说明

array get_declared_interfaces ( void )

返回一个数组包含所有已声明的接口。

返回值

本函数返回一个数组,其内容是当前脚本中所有已声明的接口的名字。

范例

示例 #1 get_declared_interfaces 例子

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

以上例程的输出类似于:

Array
(
    [0] => Traversable
    [1] => IteratorAggregate
    [2] => Iterator
    [3] => ArrayAccess
    [4] => reflector
    [5] => RecursiveIterator
    [6] => SeekableIterator
)

参见

  • interface_exists
  • get_declared_classes
  • class_implements

get_declared_traits

返回所有已定义的 traits 的数组

说明

array get_declared_traits ( void )

参数

此函数没有参数。

返回值

返回一个数组,其值包含了所有已定义的 traits 的名称。 在失败的情况下返回 NULL

参见

  • class_uses

get_object_vars

返回由对象属性组成的关联数组

说明

array get_object_vars ( object $obj )

返回由 obj 指定的对象中定义的属性组成的关联数组。

Note:

在 PHP 4.2.0 之前的版本中,如果在 obj 对象实例中声明的变量没有被赋值,则它们将不会在返回的数组中。而在 PHP 4.2.0 之后,这些变量作为键名将被赋予 NULL 值。

示例 #1 使用 get_object_vars

<?php
class Point2D {
    var $x, $y;
    var $label;

    function Point2D($x, $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    function setLabel($label)
    {
        $this->label = $label;
    }

    function getPoint()
    {
        return array("x" => $this->x,
                     "y" => $this->y,
                     "label" => $this->label);
    }
}

// "$label" is declared but not defined
$p1 = new Point2D(1.233, 3.445);
print_r(get_object_vars($p1));

$p1->setLabel("point #1");
print_r(get_object_vars($p1));

?>

以上例程会输出:

 Array
 (
     [x] => 1.233
     [y] => 3.445
     [label] =>
 )

 Array
 (
     [x] => 1.233
     [y] => 3.445
     [label] => point #1
 )

参见 get_class_methodsget_class_vars

参数

object
An object instance.

返回值

Returns an associative array of defined object accessible non-static properties for the specified object in scope. If a property have not been assigned a value, it will be returned with a NULL value.

更新日志

版本说明
5.3.0This function now returns NULL if the object isn't an object.
prior to 5.3.0If the object isn't an object, then get_object_vars would return FALSE
prior to 4.2.0If the variables declared in the class of which the object is an instance, have not been assigned a value, those will not be returned in the array

范例

示例 #2 Use of get_object_vars

<?php

class foo {
    private $a;
    public $b = 1;
    public $c;
    private $d;
    static $e;
   
    public function test() {
        var_dump(get_object_vars($this));
    }
}

$test = new foo;
var_dump(get_object_vars($test));

$test->test();

?>

以上例程会输出:

array(2) {
  ["b"]=>
  int(1)
  ["c"]=>
  NULL
}
array(4) {
  ["a"]=>
  NULL
  ["b"]=>
  int(1)
  ["c"]=>
  NULL
  ["d"]=>
  NULL
}

参见

  • get_class_methods
  • get_class_vars

get_parent_class

返回对象或类的父类名

说明

string get_parent_class ([ mixed $obj ] )

如果 obj 是对象,则返回对象实例 obj 所属类的父类名。

如果 obj 是字符串,则返回以此字符串为名的类的父类名。此功能是在 PHP 4.0.5 中增加的。

Note:

自 PHP 5 起,如果在对象的方法内调用,则 obj 为可选项。

示例 #1 使用 get_parent_class

<?php

class dad {
    function dad()
    {
    // implements some logic
    }
}

class child extends dad {
    function child()
    {
        echo "I'm " , get_parent_class($this) , "'s son\n";
    }
}

class child2 extends dad {
    function child2()
    {
        echo "I'm " , get_parent_class('child2') , "'s son too\n";
    }
}

$foo = new child();
$bar = new child2();

?>

以上例程会输出:

I'm dad's son
I'm dad's son too

参见 get_classis_subclass_of

参数

object
The tested object or class name

返回值

Returns the name of the parent class of the class of which object is an instance or the name.

Note:

If the object does not have a parent or the class given does not exist FALSE will be returned.

If called without parameter outside object, this function returns FALSE.

更新日志

版本说明
Before 5.1.0If called without parameter outside object, this function would have returned NULL with a warning.
Since 5.0.0The object parameter is optional if called from the object's method.
Since 4.0.5If object is a string, returns the name of the parent class of the class with that name.

范例

示例 #2 Using get_parent_class

<?php

class dad {
    function dad()
    {
    // implements some logic
    }
}

class child extends dad {
    function child()
    {
        echo "I'm " , get_parent_class($this) , "'s son\n";
    }
}

class child2 extends dad {
    function child2()
    {
        echo "I'm " , get_parent_class('child2') , "'s son too\n";
    }
}

$foo = new child();
$bar = new child2();

?>

以上例程会输出:

I'm dad's son
I'm dad's son too

参见

  • get_class
  • is_subclass_of

interface_exists

检查接口是否已被定义

说明

bool interface_exists ( string $interface_name [, bool $autoload = true ] )

检查接口是否已被定义。

参数

interface_name
接口名。

autoload
默认是否调用 __autoload

返回值

本函数在由 interface_name 给出的接口已定义时返回 TRUE,否则返回 FALSE

范例

示例 #1 interface_exists 例子

<?php
// 在尝试使用前先检查接口是否存在
if (interface_exists('MyInterface')) {
    class MyClass implements MyInterface
    {
        // Methods
    }
}

?>

参见

  • get_declared_interfaces
  • class_implements
  • class_exists

is_a

如果对象属于该类或该类是此对象的父类则返回 TRUE

说明

bool is_a ( object $object , string $class_name [, bool $allow_string = FALSE ] )

如果 object 是该类或该类是此对象的父类。

参数

object
The tested object

class_name
The class name

allow_string
If this parameter set to FALSE, string class name as object is not allowed. This also prevents from calling autoloader if the class doesn't exist.

返回值

Returns TRUE if the object is of this class or has this class as one of its parents, FALSE otherwise.

更新日志

版本说明
5.3.9Added allow_string parameter
5.3.0This function is no longer deprecated, and will therefore no longer throw E_STRICT warnings.
5.0.0This function became deprecated in favour of the instanceof operator. Calling this function will result in an E_STRICT warning.

范例

示例 #1 is_a 例子

<?php
// define a class
class WidgetFactory
{
  var $oink = 'moo';
}

// create a new object
$WF = new WidgetFactory();

if (is_a($WF, 'WidgetFactory')) {
  echo "yes, \$WF is still a WidgetFactory\n";
}
?>

示例 #2 在 PHP 5 中使用 instanceof 运算符

<?php
if ($WF instanceof WidgetFactory) {
    echo 'Yes, $WF is a WidgetFactory';
}
?>

参见

  • get_class
  • get_parent_class
  • is_subclass_of

is_subclass_of

如果此对象是该类的子类,则返回 TRUE

说明

bool is_subclass_of ( object $object , string $class_name )

如果对象 object 所属类是类 class_name 的子类,则返回 TRUE,否则返回 FALSE

Note:

自 PHP 5.0.3 起也可以用一个字符串来指定 object 参数(类名)。

示例 #1 is_subclass_of 例子

<?php
// define a class
class WidgetFactory
{
  var $oink = 'moo';
}

// define a child class
class WidgetFactory_Child extends WidgetFactory
{
  var $oink = 'oink';
}

// create a new object
$WF = new WidgetFactory();
$WFC = new WidgetFactory_Child();

if (is_subclass_of($WFC, 'WidgetFactory')) {
  echo "yes, \$WFC is a subclass of WidgetFactory\n";
} else {
  echo "no, \$WFC is not a subclass of WidgetFactory\n";
}

if (is_subclass_of($WF, 'WidgetFactory')) {
  echo "yes, \$WF is a subclass of WidgetFactory\n";
} else {
  echo "no, \$WF is not a subclass of WidgetFactory\n";
}

// usable only since PHP 5.0.3
if (is_subclass_of('WidgetFactory_Child', 'WidgetFactory')) {
  echo "yes, WidgetFactory_Child is a subclass of WidgetFactory\n";
} else {
  echo "no, WidgetFactory_Child is not a subclass of WidgetFactory\n";
}
?>

以上例程会输出:

yes, $WFC is a subclass of WidgetFactory
no, $WF is not a subclass of WidgetFactory
yes, WidgetFactory_Child is a subclass of WidgetFactory

参见 get_classget_parent_classis_a

参数

object
A class name or an object instance

class_name
The class name

allow_string
If this parameter set to false, string class name as object is not allowed. This also prevents from calling autoloader if the class doesn't exist.

返回值

This function returns TRUE if the object object, belongs to a class which is a subclass of class_name, FALSE otherwise.

更新日志

版本说明
5.3.9Added allow_string parameter
5.0.3You may also specify the object parameter as a string (the name of the class)

范例

示例 #2 is_subclass_of example

<?php
// define a class
class WidgetFactory
{
  var $oink = 'moo';
}

// define a child class
class WidgetFactory_Child extends WidgetFactory
{
  var $oink = 'oink';
}

// create a new object
$WF = new WidgetFactory();
$WFC = new WidgetFactory_Child();

if (is_subclass_of($WFC, 'WidgetFactory')) {
  echo "yes, $WFC is a subclass of WidgetFactory\n";
} else {
  echo "no, $WFC is not a subclass of WidgetFactory\n";
}


if (is_subclass_of($WF, 'WidgetFactory')) {
  echo "yes, $WF is a subclass of WidgetFactory\n";
} else {
  echo "no, $WF is not a subclass of WidgetFactory\n";
}


// usable only since PHP 5.0.3
if (is_subclass_of('WidgetFactory_Child', 'WidgetFactory')) {
  echo "yes, WidgetFactory_Child is a subclass of WidgetFactory\n";
} else {
  echo "no, WidgetFactory_Child is not a subclass of WidgetFactory\n";
}
?>

以上例程会输出:

yes, $WFC is a subclass of WidgetFactory
no, $WF is not a subclass of WidgetFactory
yes, WidgetFactory_Child is a subclass of WidgetFactory

注释

Note:

如果此类不是已知类,使用此函数会使用任何已注册的 autoloader

参见

  • get_class
  • get_parent_class
  • is_a
  • class_parents

method_exists

检查类的方法是否存在

说明

bool method_exists ( mixed $object , string $method_name )

检查类的方法是否存在于指定的 object中。

参数

object
对象示例或者类名。

method_name
方法名。

返回值

如果 method_name 所指的方法在 object 所指的对象类中已定义,则返回 TRUE,否则返回 FALSE

注释

Note:

如果此类不是已知类,使用此函数会使用任何已注册的 autoloader

范例

示例 #1 method_exists 例子

<?php
$directory = new Directory('.');
var_dump(method_exists($directory,'read'));
?>

以上例程会输出:

bool(true)

示例 #2 Static method_exists 例子

<?php
var_dump(method_exists('Directory','read'));
?>

以上例程会输出:

bool(true)

参见

  • function_exists
  • is_callable
  • class_exists

property_exists

检查对象或类是否具有该属性

说明

bool property_exists ( mixed $class , string $property )

本函数检查给出的 property 是否存在于指定的类中(以及是否能在当前范围内访问)。

Note:

As opposed with isset, class="function">property_exists returns TRUE even if the property has the value NULL.

参数

class
字符串形式的类名或要检查的类的一个对象

property
属性的名字

返回值

如果该属性存在则返回 TRUE,如果不存在则返回 FALSE,出错返回 NULL

注释

Note:

如果此类不是已知类,使用此函数会使用任何已注册的 autoloader

Note:

The property_exists function cannot detect properties that are magically accessible using the __get magic method.

更新日志

版本说明
5.3.0This function checks the existence of a property independent of accessibility.

范例

示例 #1 A property_exists example

<?php

class myClass {
    public $mine;
    private $xpto;
    static protected $test;

    static function test() {
        var_dump(property_exists('myClass', 'xpto')); //true
    }
}

var_dump(property_exists('myClass', 'mine'));   //true
var_dump(property_exists(new myClass, 'mine')); //true
var_dump(property_exists('myClass', 'xpto'));   //true, as of PHP 5.3.0
var_dump(property_exists('myClass', 'bar'));    //false
var_dump(property_exists('myClass', 'test'));   //true, as of PHP 5.3.0
myClass::test();

?>

参见

  • method_exists

trait_exists

检查指定的 trait 是否存在

说明

bool trait_exists ( string $traitname [, bool $autoload ] )

参数

traitname
待检查的 trait 的名称

autoload
如果尚未加载,是否使用自动加载(autoload)。

返回值

如果 trait 存在返回 TRUE,不存在则返回 FALSE。发生错误的时候返回 NULL

目录