gpt4 book ai didi

php - 如何获取对象的非限定(短)类名?

转载 作者:IT老高 更新时间:2023-10-28 11:45:07 28 4
gpt4 key购买 nike

如何在 PHP namespace 环境中检查对象的类而不指定完整的命名空间类。

例如,假设我有一个对象库/实体/契约(Contract)/名称。

以下代码不起作用,因为 get_class 返回完整的命名空间类。

If(get_class($object) == 'Name') {
... do this ...
}

命名空间魔术关键字返回当前命名空间,如果测试对象有另一个命名空间,则它没有用。

我可以简单地用命名空间指定完整的类名,但这似乎锁定了代码的结构。如果我想动态更改命名空间,也没有多大用处。

谁能想到一个有效的方法来做到这一点。我想一种选择是正则表达式。

最佳答案

您可以通过反射来做到这一点。具体来说,您可以使用 ReflectionClass::getShortName方法,它获取没有其命名空间的类的名称。

首先需要构建一个ReflectionClass实例,然后调用该实例的getShortName方法:

$reflect = new ReflectionClass($object);
if ($reflect->getShortName() === 'Name') {
// do this
}

但是,我无法想象在许多情况下这是可取的。如果你想要求对象是某个类的成员,测试它的方法是instanceof .如果您想要一种更灵活的方式来表示某些约束,那么这样做的方法是编写一个接口(interface)并要求代码实现该接口(interface)。同样,正确的方法是使用 instanceof。 (您可以使用 ReflectionClass 来实现,但性能会差很多。)

关于php - 如何获取对象的非限定(短)类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19901850/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com