什么是正确的使用方式" instanceof"?

时间:2014-09-12 01:52:46

标签: php symfony

我有这段代码:

$i = 0;
foreach ($entities as $entity)
{
    $person = $entity->getPerson();

    echo "Iteration: " . $i . " Person Type: " . get_class($person);

    if ($person instanceof NaturalPerson)
    {
        $id = $person->getIdentificationType() . $person->getCI();
    }
    else
    {
        $id = $person->getIdentificationType() . $person->getRIF();
    }

    $i++;
    $order['id'] = $id;

    $orders[] = $order;
}

但是每当我运行该函数时,我都会收到此错误:

  

尝试在课堂上调用方法“getRIF”   “Tanane \ FrontendBundle \ Entity \ NaturalPerson”中   /var/www/html/tanane/src/Tanane/BackendBundle/Controller/OrderController.php   114.你的意思是打电话:“getCI”,“getId”?

我不知道为什么,因为第一行的echo返回了这个:

Iteration: 0 Person Type: Tanane\FrontendBundle\Entity\LegalPerson
Iteration: 1 Person Type: Tanane\FrontendBundle\Entity\NaturalPerson

为什么?错误在哪里?

1 个答案:

答案 0 :(得分:3)

您需要检查完全限定类名称(FQCN):

if ($person instanceof \Tanane\FrontendBundle\Entity\NaturalPerson)

或者您需要在文件顶部(命名空间下方)放置一个USE语句:

use Tanane\FrontendBundle\Entity\NaturalPerson;

所有Symfony类都是命名空间,因此PHP无法找到一个类" NaturalPerson"如果它不在与调用它的文件相同的命名空间中。

PHP Namespaces