3

如果包含 FQCN 的字符串如下所示,则可以静态检查(意味着不创建实例)$fqcn

function checkCreatingInstance($fqcn)
{
    // Create a new instance
    $instance = new $fqcn;

    return ($instance instanceof 'MyNamespace\Entity\SendMessage');
}

function checkStatically($fqcn)
{
    /* TODO */
}

$fqcn = 'MyNamespace\Entity\SendSmallTextMessage';
var_dump(checkCreatingInstance($fqcn)); // true

是给定的类型吗?一个示例层次结构:

namespace MyNamespace\Entity;

class SendMessage { /* Stuff */ }

namespace MyNamespace\Entity;

class SendNewsletter extends SendMessage { /* Stuff */ }

namespace MyNamespace\Entity;

class SendSmallTextMessage extends SendMessage { /* Stuff */ }
4

2 回答 2

3

是的。如果你作为第三个参数传递is_a(),就会这样做。TRUE

例子

这样做的好处是您可以编写函数,使其接受对象或字符串,并且无论哪种方式都可以工作,您不必为静态和实例化检查提供两个函数:

function checkIsChildOf ($objOrFQCN, $parent)
{
    return is_a($objOrFQCN, $parent, TRUE);
}

PHP 手册的另一个例子很差 - 这种行为记录在手册中,据我所知,但我不知道你为什么没有看到它,所以手册很差,不能让它可见。

于 2012-06-06T10:20:47.380 回答
2
namespace Foo;

class A { }

class B extends A { }

class C { }

is_subclass_of('\Foo\A', '\Foo\A');  // false
is_subclass_of('\Foo\B', '\Foo\A');  // true
is_subclass_of('\Foo\C', '\Foo\A');  // false

http://php.net/is_subclass_of

于 2012-06-06T10:22:49.943 回答