我想检查$ model是否是A,B或C类的实例,但不是D.所以我有一个这样的数组:
$relevant_classes = [A, B, C];
我知道如果模型是在这些类的实例中,我可以检查instance of
。但是,如果模型是它的一个实例,我现在必须遍历数组并询问每个单独的类吗?
我宁愿做一些比较类实例的if(in_array($model, $relevant_classes))
之类的东西。这可能在PHP(Laravel)?
答案 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
返回true
或false
。