【问题标题】:Can I check if an object is kind of a specific class, in PHP? [duplicate]我可以在 PHP 中检查对象是否属于特定类吗? [复制]
【发布时间】:2009-12-27 10:50:10
【问题描述】:

示例:方法应该返回特定类的实例。如果它来自该类,我如何检查该返回值?

【问题讨论】:

    标签: php


    【解决方案1】:

    您可以使用instanceof 运算符来检查对象是否是:

    • 一类
    • 或该类的子类
    • 或实现接口的类的实例

    这意味着它不能用于检测您的对象是否是 specific 类的实例——因为如果您的对象是该类的子类的实例,它会说“是”。


    比如这部分代码:

    class ClassA {}
    class ClassB extends ClassA {}
    
    $a = new ClassB();
    if ($a instanceof ClassA) {
        echo '$a is an instanceof ClassA<br />';
    }
    if ($a instanceof ClassB) {
        echo '$a is an instanceof ClassB<br />';
    }
    

    会给你这个输出:

    $a is an instanceof ClassA
    $a is an instanceof ClassB
    

    $a 在某种程度上是ClassA 的实例,因为ClassB 是ClassA 的子类。

    当然,$a 也是ClassB 的一个实例——参见它被实例化的那一行。

    【讨论】:

    • +1 详细说明。
    • @Pekka : 谢谢 ;-) 我再次编辑,提供一个例子 ^^
    • 像往常一样来自 Pascal,高质量的答案。谢谢大佬。
    • 这也是熟悉Liskov substitution principle的任何人的预期行为! ClassB 的实例确实也是 Class A 的实例(除非您的 OOP 做错了什么)。
    【解决方案2】:

    您无法检查返回值本身,但可以使用“instanceof”检查返回的类。 (在类似的基础上,您可能会发现“get_class”很有用。)

    【讨论】:

      【解决方案3】:

      您可以使用instanceof 运算符或is_a 函数。

      is_a 如果你想传入一个带有类名的字符串(在更动态的代码库中),这很有用。

      【讨论】:

        【解决方案4】:
        if ($object instanceof classname)
         ....
        

        Manual: Classes and Objects in PHP5

        【讨论】:

          猜你喜欢
          • 2020-06-15
          • 2013-03-14
          • 2013-09-12
          • 1970-01-01
          • 2011-05-16
          • 2012-06-10
          • 2013-01-30
          • 1970-01-01
          • 2018-04-17
          相关资源
          最近更新 更多