【发布时间】:2018-05-27 16:27:26
【问题描述】:
我见过几个线程,人们询问如何在 PHP 中获取类或对象的名称。但是,我在任何地方都看不到解释的各种可能性之间的区别。我希望这里有人可以帮助我。
所以为了得到被调用类的类名,我知道有两种可能:
get_called_class()static::class
(get_class($this) 用于非静态类)
为了获取你放置代码的类的类名,我知道这三种可能性:
get_class()__CLASS__self::class
我现在有什么可以忽略的差异吗?一种方式相对于另一种方式的潜在风险和缺点是什么?
【问题讨论】:
-
尝试在一个类和扩展它的类、实例方法和静态方法中使用所有这些方法来找出答案。
-
这就是我所做的,它们都返回相同的结果。我想可能还有其他一些我想不出的区别。毕竟,他们为什么要在 PHP 5.5 中引入
::class,而get_class()、__CLASS__和get_called_class()可以实现相同的功能? -
::class可以在编译时计算,get_class()是一个函数调用,因此它返回的值仅在执行时可用。 -
这是否意味着
::class效率更高? -
差别不大。如果您的目标是优化,请检查对数据库的访问(优化 SQL 查询并减少它们的数量和它们检索的数据量)、文件系统和远程资源。