[关闭]
@Chiang 2020-01-07T14:24:43.000000Z 字数 1930 阅读 506

类型运算符 instanceof

PHP


instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例:

  1. <?php
  2. class MyClass
  3. {
  4. }
  5. class NotMyClass
  6. {
  7. }
  8. $a = new MyClass;
  9. var_dump($a instanceof MyClass);
  10. var_dump($a instanceof NotMyClass);
  11. ?>
  12. bool(true)
  13. bool(false)

instanceof 也可用来确定一个变量是不是继承自某一父类的子类的实例:

  1. <?php
  2. class ParentClass
  3. {
  4. }
  5. class MyClass extends ParentClass
  6. {
  7. }
  8. $a = new MyClass;
  9. var_dump($a instanceof MyClass);
  10. var_dump($a instanceof ParentClass);
  11. ?>
  12. bool(true)
  13. bool(true)

检查一个对象是否不是某个类的实例,可以使用逻辑运算符 not。

  1. <?php
  2. class MyClass
  3. {
  4. }
  5. $a = new MyClass;
  6. var_dump(!($a instanceof stdClass));
  7. ?>
  8. bool(true)

最后,instanceof也可用于确定一个变量是不是实现了某个接口的对象的实例:

  1. <?php
  2. interface MyInterface
  3. {
  4. }
  5. class MyClass implements MyInterface
  6. {
  7. }
  8. $a = new MyClass;
  9. var_dump($a instanceof MyClass);
  10. var_dump($a instanceof MyInterface);
  11. ?>
  12. bool(true)
  13. bool(true)

虽然 instanceof 通常直接与类名一起使用,但也可以使用对象或字符串变量:

  1. <?php
  2. interface MyInterface
  3. {
  4. }
  5. class MyClass implements MyInterface
  6. {
  7. }
  8. $a = new MyClass;
  9. $b = new MyClass;
  10. $c = 'MyClass';
  11. $d = 'NotMyClass';
  12. var_dump($a instanceof $b); // $b is an object of class MyClass
  13. var_dump($a instanceof $c); // $c is a string 'MyClass'
  14. var_dump($a instanceof $d); // $d is a string 'NotMyClass'
  15. ?>
  16. bool(true)
  17. bool(true)
  18. bool(false)

如果被检测的变量不是对象,instanceof 并不发出任何错误信息而是返回 FALSE。不允许用来检测常量。

  1. <?php
  2. $a = 1;
  3. $b = NULL;
  4. $c = imagecreate(5, 5);
  5. var_dump($a instanceof stdClass); // $a is an integer
  6. var_dump($b instanceof stdClass); // $b is NULL
  7. var_dump($c instanceof stdClass); // $c is a resource
  8. var_dump(FALSE instanceof stdClass);
  9. ?>
  10. bool(false)
  11. bool(false)
  12. bool(false)
  13. PHP Fatal error: instanceof expects an object instance, constant given

is_a()

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

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

参数 ¶
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.

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注