UNPKG

manual-php

Version:
586 lines (467 loc) 12 kB
# 类与对象 * [class_alias - 为一个类创建别名](#classalias) * [class_exists - 检查类是否已定义](#classexists) * [get_called_class - 获取后期静态绑定类的名称](#getcalledclass) * [get_class_methods - 返回由类的方法名组成的数组](#getclassmethods) * [get_class_vars - 返回由类的默认属性组成的数组](#getclassvars) * [get_class - 返回对象的类名](#getclass) * [get_declared_classes - 返回由已定义类的名字所组成的数组](#getdeclaredclasses) * [get_declared_interfaces - 返回一个数组包含所有已声明的接口](#getdeclaredinterfaces) * [get_declared_traits - 返回所有已定义的 Trait 的数组](#getdeclaredtraits) * [get_object_vars - 返回由对象属性组成的关联数组](#getobjectvars) * [get_parent_class - 返回对象或类的父类名](#getparentclass) * [interface_exists - 检查接口是否已被定义](#interfaceexists) * [is_a - 如果对象属于该类或该类是此对象的父类则返回 true](#isa) * [is_subclass_of - 如果此对象是该类的子类,则返回 true](#issubclassof) * [method_exists - 检查类的方法是否存在](#methodexists) * [property_exists - 检查对象或类是否具有该属性](#propertyexists) * [trait_exists - 检查指定的 Trait 是否存在](#traitexists) ## class_alias ```php <?php class Foo { // } var_dump(class_alias('Foo', 'Bar')); // bool(true) $foo = new Foo(); $bar = new Bar(); var_dump($foo == $bar); // bool(true) var_dump($foo === $bar); // bool(false) var_dump($foo instanceof Foo); // bool(true) var_dump($foo instanceof Bar); // bool(true) var_dump($bar instanceof Foo); // bool(true) var_dump($bar instanceof Bar); // bool(true) ``` ## class_exists ```php <?php class Foo { // } var_dump(class_exists('Foo')); // bool(true) var_dump(class_exists('Bar')); // bool(false) ``` ## get_called_class ```php <?php class Foo { /** * Return the class name of the late static binding. * * @param void * @return string */ public static function method(): string { return get_called_class(); } /** * Return the class name of the late static binding. * * @param void * @return string */ public static function call(): string { return static::class; } } class Bar extends Foo { } var_dump(Foo::method()); // string(3) "Foo" var_dump(Bar::method()); // string(3) "Bar" var_dump(Foo::call()); // string(3) "Foo" var_dump(Bar::call()); // string(3) "Bar" ``` ## get_class_methods ```php <?php class Foo { /** * Public method. * * @param void * @return void */ public static function public() { // } /** * Protected method. * * @param void * @return void */ protected static function protected() { // } /** * Private method. * * @param void * @return void */ private static function private() { // } /** * Return all visibility methods. * * @param void * @return array */ public static function method(): array { return get_class_methods(static::class); } } class Bar extends Foo { // } $foo = new Foo(); $bar = new Bar(); var_dump(get_class_methods('Foo')); // array(2) { [0]=> string(6) "public" [1]=> string(6) "method" } var_dump(get_class_methods('Bar')); // array(2) { [0]=> string(6) "public" [1]=> string(6) "method" } var_dump(get_class_methods($foo)); // array(2) { [0]=> string(6) "public" [1]=> string(6) "method" } var_dump(get_class_methods($bar)); // array(2) { [0]=> string(6) "public" [1]=> string(6) "method" } var_dump(Foo::method()); // array(4) { [0]=> string(6) "public" [1]=> string(9) "protected" [2]=> string(7) "private" [3]=> string(6) "method" } var_dump(Bar::method()); // array(4) { [0]=> string(6) "public" [1]=> string(9) "protected" [2]=> string(7) "private" [3]=> string(6) "method" } ``` ## get_class_vars ```php <?php class Foo { /** * Public property. * * @var string */ public string $public = 'public'; /** * Protected property. * * @var string */ protected string $protected = 'protected'; /** * Private property. * * @var string */ private $private; /** * Return all visibility properties. * * @param void * @return array */ public static function method(): array { return get_class_vars(static::class); } } class Bar extends Foo { // } var_dump(get_class_vars('Foo')); // array(1) { ["public"]=> string(6) "public" } var_dump(get_class_vars('Bar')); // array(1) { ["public"]=> string(6) "public" } var_dump(Foo::method()); // array(3) { ["public"]=> string(6) "public" ["protected"]=> string(9) "protected" ["private"]=> NULL } var_dump(Bar::method()); // array(3) { ["public"]=> string(6) "public" ["protected"]=> string(9) "protected" ["private"]=> NULL } ``` ## get_class ```php <?php class Foo { /** * Return the class name of the specified object. * * @param void * @return string */ public function method(): string { return get_class($this); } } class Bar extends Foo { // } $foo = new Foo(); $bar = new Bar(); var_dump(get_class($foo)); // string(3) "Foo" var_dump(get_class($bar)); // string(3) "Bar" var_dump($foo->method()); // string(3) "Foo" var_dump($bar->method()); // string(3) "Bar" ``` ## get_declared_classes ```php <?php var_dump(get_declared_classes()); ``` ## get_declared_interfaces ```php <?php var_dump(get_declared_interfaces()); ``` ## get_declared_traits ```php <?php var_dump(get_declared_traits()); ``` ## get_object_vars ```php <?php class Foo { /** * Public property. * * @var string */ public string $public = 'public'; /** * Protected property. * * @var string */ protected string $protected = 'protected'; /** * Private property. * * @var string */ private $private; /** * Return all visibility properties. * * @param void * @return array */ public function method(): array { return get_object_vars($this); } } class Bar extends Foo { // } $foo = new Foo(); $bar = new Bar(); var_dump(get_object_vars($foo)); // array(1) { ["public"]=> string(6) "public" } var_dump(get_object_vars($bar)); // array(1) { ["public"]=> string(6) "public" } var_dump($foo->method()); // array(3) { ["public"]=> string(6) "public" ["protected"]=> string(9) "protected" ["private"]=> NULL } var_dump($bar->method()); // array(3) { ["public"]=> string(6) "public" ["protected"]=> string(9) "protected" ["private"]=> NULL } ``` ## get_parent_class ```php <?php class Foo { /** * Return the parent class name of the specified class. * * @param void * @return string|bool */ public static function method() { return get_parent_class(static::class); } } class Bar extends Foo { // } $foo = new Foo(); $bar = new Bar(); var_dump(get_parent_class('Foo')); // bool(false) var_dump(get_parent_class('Bar')); // string(3) "Foo" var_dump(get_parent_class($foo)); // bool(false) var_dump(get_parent_class($bar)); // string(3) "Foo" var_dump(Foo::method()); // bool(false) var_dump(Bar::method()); // string(3) "Foo" ``` ## interface_exists ```php <?php interface Foo { // } var_dump(interface_exists('Foo')); // bool(true) var_dump(interface_exists('Bar')); // bool(false) ``` ## is_a ```php <?php class Foo { // } class Bar extends Foo { // } $foo = new Foo(); $bar = new Bar(); var_dump(is_a('Foo', 'Foo', false)); // bool(false) var_dump(is_a('Foo', 'Bar', false)); // bool(false) var_dump(is_a('Bar', 'Foo', false)); // bool(false) var_dump(is_a('Bar', 'Bar', false)); // bool(false) var_dump(is_a('Foo', 'Foo', true)); // bool(true) var_dump(is_a('Foo', 'Bar', true)); // bool(false) var_dump(is_a('Bar', 'Foo', true)); // bool(true) var_dump(is_a('Bar', 'Bar', true)); // bool(true) var_dump(is_a($foo, 'Foo')); // bool(true) var_dump(is_a($foo, 'Bar')); // bool(false) var_dump(is_a($bar, 'Foo')); // bool(true) var_dump(is_a($bar, 'Bar')); // bool(true) ``` ## is_subclass_of ```php <?php class Foo { // } class Bar extends Foo { // } $foo = new Foo(); $bar = new Bar(); var_dump(is_subclass_of('Foo', 'Foo', false)); // bool(false) var_dump(is_subclass_of('Foo', 'Bar', false)); // bool(false) var_dump(is_subclass_of('Bar', 'Foo', false)); // bool(false) var_dump(is_subclass_of('Bar', 'Bar', false)); // bool(false) var_dump(is_subclass_of('Foo', 'Foo', true)); // bool(false) var_dump(is_subclass_of('Foo', 'Bar', true)); // bool(false) var_dump(is_subclass_of('Bar', 'Foo', true)); // bool(true) var_dump(is_subclass_of('Bar', 'Bar', true)); // bool(false) var_dump(is_subclass_of($foo, 'Foo')); // bool(false) var_dump(is_subclass_of($foo, 'Bar')); // bool(false) var_dump(is_subclass_of($bar, 'Foo')); // bool(true) var_dump(is_subclass_of($bar, 'Bar')); // bool(false) ``` ## method_exists ```php <?php class Foo { /** * Public method. * * @param void * @return void */ public static function public() { // } /** * Protected method. * * @param void * @return void */ protected static function protected() { // } /** * Private method. * * @param void * @return void */ private static function private() { // } } class Bar extends Foo { // } $foo = new Foo(); $bar = new Bar(); var_dump(method_exists('Foo', 'public')); // bool(true) var_dump(method_exists('Foo', 'protected')); // bool(true) var_dump(method_exists('Foo', 'private')); // bool(true) var_dump(method_exists('Bar', 'public')); // bool(true) var_dump(method_exists('Bar', 'protected')); // bool(true) var_dump(method_exists('Bar', 'private')); // bool(false) var_dump(method_exists($foo, 'public')); // bool(true) var_dump(method_exists($foo, 'protected')); // bool(true) var_dump(method_exists($foo, 'private')); // bool(true) var_dump(method_exists($bar, 'public')); // bool(true) var_dump(method_exists($bar, 'protected')); // bool(true) var_dump(method_exists($bar, 'private')); // bool(true) ``` ## property_exists ```php <?php class Foo { /** * Public property. * * @var string */ public string $public = 'public'; /** * Protected property. * * @var string */ protected string $protected = 'protected'; /** * Private property. * * @var string */ private $private; } class Bar extends Foo { // } $foo = new Foo(); $bar = new Bar(); var_dump(property_exists('Foo', 'public')); // bool(true) var_dump(property_exists('Foo', 'protected')); // bool(true) var_dump(property_exists('Foo', 'private')); // bool(true) var_dump(property_exists('Bar', 'public')); // bool(true) var_dump(property_exists('Bar', 'protected')); // bool(true) var_dump(property_exists('Bar', 'private')); // bool(false) var_dump(property_exists($foo, 'public')); // bool(true) var_dump(property_exists($foo, 'protected')); // bool(true) var_dump(property_exists($foo, 'private')); // bool(true) var_dump(property_exists($bar, 'public')); // bool(true) var_dump(property_exists($bar, 'protected')); // bool(true) var_dump(property_exists($bar, 'private')); // bool(false) ``` ## trait_exists ```php <?php trait Foo { // } var_dump(trait_exists('Foo')); // bool(true) var_dump(trait_exists('Bar')); // bool(false) ```