PHP Проверьте, является ли $ model экземпляром одного из многих классов - PullRequest
0 голосов
/ 09 мая 2018

Я хочу проверить, является ли $ model экземпляром класса A, B или C, но не D. Поэтому у меня есть такой массив:

$relevant_classes = [A, B, C];

Я знаю, что могу проверить с помощью instance of, является ли модель экземпляром этих классов. Но теперь я должен пройтись по массиву и спросить для каждого отдельного класса, является ли модель его экземпляром?

Я бы предпочел сделать что-то вроде if(in_array($model, $relevant_classes)), которое сравнивает экземпляр класса. Это возможно в PHP (Laravel)?

Ответы [ 4 ]

0 голосов
/ 09 мая 2018

Вы можете использовать интерфейсы для этого. Маленький пример:

    <?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();
    }
}
0 голосов
/ 09 мая 2018

Php bulid-in get_class () функция должна помочь Вам

0 голосов
/ 09 мая 2018

Вы можете использовать get_class($model), чтобы получить имя класса экземпляра.

Если вы хотите проверить, является ли $model экземпляром какого-либо определенного класса, вы можете проверить, как

$model instanceof ModelName

, который возвращает true или false.

0 голосов
/ 09 мая 2018

Вы можете позвонить get_class(), чтобы получить имя класса, поэтому ваш тест будет ...

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

if(in_array(get_class($model), $relevant_classes))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...