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