• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • class_implements()

    (PHP 5, PHP 7)

    返回指定的类实现的所有接口。

    说明

    class_implements(mixed $class[,bool $autoload]): array

    本函数返回一个数组,该数组中包含了指定类$class及其父类所实现的所有接口的名称。

    参数

    $class

    对象(类实例)或字符串(类名称)。

    $autoload

    是否允许使用__autoload魔术函数来自动装载该类。默认值为TRUE

    返回值

    调用成功则返回一个数组,否则返回FALSE

    更新日志

    版本说明
    5.1.0增加了允许参数$class为字符串的选项。增加了$autoload参数。

    范例

    class_implements() example

    <?php
    interface foo { }
    class bar implements foo {}
    print_r(class_implements(new bar));
    // since PHP 5.1.0 you may also specify the parameter as a string
    print_r(class_implements('bar'));
    function __autoload($class_name) {
       require_once $class_name . '.php';
    }
    // use __autoload to load the 'not_loaded' class
    print_r(class_implements('not_loaded', true));
    ?>
    

    以上例程的输出类似于:

    Array
    (
        [foo] => foo
    )
    Array
    (
        [interface_of_not_loaded] => interface_of_not_loaded
    )
    

    参见

    You can also check if a class implements an interface using instanceof.
    E.g.
    <?php
    if($myObj instanceof MyInterface) {
      echo "It is! It is!";
    }
    ?>
    
    Hint:
    <?php
    in_array("your-interface", class_implements($object_or_class_name));
    ?>
    would check if 'your-interface' is ONE of the implemented interfaces.
    Note that you can use something similar to be sure the class only implements that, (whyever you would want that?)
    <?php
    array("your-interface") == class_implements($object_or_class_name);
    ?>
    I use the first technique to check if a module has the correct interface implemented, or else it throws an exception.
    Calling class_implements with a non-loadable class name or a non-object results in a warning:
    <?php
    // Warning: class_implements(): Class abc does not exist and could not be loaded in /home/a.panek/Projects/sauce/lib/Sauce/functions.php on line 196
    $interfaces = class_implements('abc');
    ?>
    This is not documented and should just return FALSE as the documentation above says.
    Luckily, it prints out superinterfaces as well in reverse order so iterative searching works fine:
      <?php
      
      interface InterfaceA { }
      
      interface InterfaceB extends InterfaceA { }
      
      class MyClass implements InterfaceB { }
      
      print_r(class_implements(new MyClass()));
      
      ?>
    prints out:
      Array
      (
        [InterfaceB] => InterfaceB
        [InterfaceA] => InterfaceA
      )
    The order of interfaces is not reliable and varies between PHP versions.

    下篇:class_parents()