源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

PHP new static 和 new self详解

  • 时间:2020-06-05 18:18 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:PHP new static 和 new self详解
最近在一个视频的评论被问到一个小问题:这里选择用static 而不是self有特殊的考虑么?或者我们可以这样转换一下问题: PHP 的 new static 和 new self 具体有什么? 其实这个来看一个例子应该就很清晰了:
class Father {

 public static function getSelf() {
  return new self();
 }

 public static function getStatic() {
  return new static();
 }
}

class Son extends Father {}

echo get_class(Son::getSelf()); // Father
echo get_class(Son::getStatic()); // Son
echo get_class(Father::getSelf()); // Father
echo get_class(Father::getStatic()); // Father
这里面注意这一行 [code]get_class(Son::getStatic());[/code] 返回的是 [code]Son[/code] 这个 class,可以总结如下: new self 1.[code]self[/code]返回的是 [code]new self[/code] 中关键字 [code]new[/code] 所在的类中,比如这里例子的 :
public static function getSelf() {
  return new self(); // new 关键字在 Father 这里
 }
始终返回 [code]Father[/code]。 new static 2.[code]static[/code] 则上面的基础上,更聪明一点点:[code]static[/code] 会返回执行 [code]new static()[/code] 的类,比如 [code]Son[/code] 执行 [code]get_class(Son::getStatic())[/code] 返回的是 [code]Son[/code], [code]Father[/code] 执行 [code]get_class(Father::getStatic())[/code] 返回的是 [code]Father[/code] 而在没有继承的情况下,可以认为 [code]new self[/code] 和 [code]new static[/code]是返回相同的结果。 Tips: 可以用一个好的 IDE 来直接看注释。比如 PhpStorm: [img]http://files.jb51.net/file_images/article/201702/2017021916455214.gif[/img] Happy Hacking
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部