PHP检查$ model是否是多个类中的一个的实例

时间:2018-05-09 08:12:04

标签: php laravel

我想检查$ model是否是A,B或C类的实例,但不是D.所以我有一个这样的数组:

$relevant_classes = [A, B, C];

我知道如果模型是在这些类的实例中,我可以检查instance of。但是,如果模型是它的一个实例,我现在必须遍历数组并询问每个单独的类吗?

我宁愿做一些比较类实例的if(in_array($model, $relevant_classes))之类的东西。这可能在PHP(Laravel)?

4 个答案:

答案 0 :(得分:5)

您可以致电get_class()获取课程名称,因此您的考试将是......

$relevant_classes = [A::class, "B", C::class]; // use ::class or the class string

if(in_array(get_class($model), $relevant_classes))

答案 1 :(得分:2)

您可以使用接口。小例子:

    <?php

interface iA {
    public function foo();
}

interface iB {
    public function bar();
}

class A implements iA {
    public function foo(){ echo 1; }
}

class B implements iA {
    public function foo(){ echo 2; }
}

class C implements iB {
    public function bar(){ echo 3; }
}

class D implements iA, iB {
    public function foo(){ echo 4; }
    public function bar(){ echo 5; }
}

$classes = [new A, new B, new C, new D];

foreach ($classes as $class) {
    if ($class instanceof iA) {
        $class->foo();
    }
    if ($class instanceof iB) {
        $class->bar();
    }
}

答案 2 :(得分:0)

Php bulid-in get_class()函数可以帮助您

答案 3 :(得分:-1)

您可以使用get_class($model)获取实例的类名。

如果您想检查$model是否是任何特定类的实例,那么您可以检查

$model instanceof ModelName

返回truefalse