php – 差异static :: class vs get_called_class()和__CLASS__ vs get_class()vs self :: class

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 差异static :: class vs get_called_class()和__CLASS__ vs get_class()vs self :: class脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经看过几个线程,人们会问如何在 PHP获取类或对象的名称.但是,我无法看到解释各种可能性之间的差异.我希望这里有人可以帮助我.

因此,为了获得被调用类的类名,我知道两种可能性:

> get_called_class()
> static :: class

(get_class($this)表示非静态类)

为了获得放置代码的类的类名,我知道这三种可能性:

> get_class()
> __CLASS__
>自我::类

我现在可能忽视哪些差异?单向另一种方式的潜在冒险和缺点是什么?

间的差异

get_class()

当您将对象实例指针作为第一个也是唯一的参数传递时,它返回一个类名,包括当前类的限定名称空间(不带参数)或任何指定的对象实例.

__CLASS__

返回限定名称空间和当前类名的魔术常量.在这里,您无法测试其他对象的类名.
根据PHP 5.4,它适用于特征.也就是说,当在类中使用特征时,它将返回该类的名称空间和名称.

::class

仅自PHP 5.5起可用.它使用类名和命名空间解析来获取信息,因此它不需要事先实例化类.另请注意:

测试

<?PHP
namespace nTest;
trait tTest {
  function __toString() {return get_class();}
  function className() {return __CLASS__;}  // per PHP 5.4
  function traitName() {return __TRAIT__;}
}
class cTest {
  use tTest;
  function usedTraitName() {return __TRAIT__;}
}
class cClassWithoutObject {}
$oTest = new cTest;

header('Content-type: text/plain');
print                                  // Output:
    $oTest . PHP_EOL                   // 'nTest::cTest'
  . get_class($oTest) . PHP_EOL        // 'nTest::cTest'
  . $oTest->className() . PHP_EOL      // 'nTest::cTest'
  . $oTest->traitName() . PHP_EOL      // 'nTest::tTest' (trait!)
  . $oTest->usedTraitName() . PHP_EOL  // '' (no trait!)
  . cTest::class . PHP_EOL             // 'nTest::cTest'
  . cClassWithoutObject::class;        // 'nTest::cTestnotinstantiated'

脚本宝典总结

以上是脚本宝典为你收集整理的php – 差异static :: class vs get_called_class()和__CLASS__ vs get_class()vs self :: class全部内容,希望文章能够帮你解决php – 差异static :: class vs get_called_class()和__CLASS__ vs get_class()vs self :: class所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: