如果包含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 */ }
答案 0 :(得分:3)
是。 is_a()
会执行此操作,如果您将TRUE
作为第三个参数传递。
这样做的好处是你可以编写你的函数,使它接受和对象或字符串,它将以任何方式工作,你不必有两个函数用于静态和实例化的检查:
function checkIsChildOf ($objOrFQCN, $parent)
{
return is_a($objOrFQCN, $parent, TRUE);
}
另一个PHP手册很差的例子 - 这个行为记录在手册中,据我所知,但我不知道为什么你没有看到它,所以手册很差,不能做到可见。
答案 1 :(得分: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