下面我们举个例子:

 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

new self

这里面注意这一行 get_class(Son::getStatic()); 返回的是 Son 这个 class, 可以总结如下:

self 返回的是 new self 中关键字 new 所在的类中,比如这里例子的 :

public static function getSelf() {
return new self(); // new 关键字在 Father 这里
}

始终返回 Father。

new static

static 则上面的基础上,更聪明一点点:static 会返回执行 new static() 的类,比如 Son 执行get_class(Son::getStatic()) 返回的是 Son, Father 执行 get_class(Father::getStatic()) 返回的是 Father;

而在没有继承的情况下,可以认为 new self 和 new static 是返回相同的结果。

最新文章

  1. winform、C# 自动更新
  2. 移动web开发问题集
  3. SQL基本语句以及示例
  4. CF #305 (Div. 2) C. Mike and Frog(扩展欧几里得&&当然暴力is also no problem)
  5. poj 1724:ROADS(DFS + 剪枝)
  6. 推荐流程设计器http://www.processon.com/
  7. 深入理解abstract class和interface(转)
  8. 初探JAVA中I/O流(一)
  9. Golang学习 - unicode 包
  10. Spring MVC @RequestMapping Annotation Example with Controller, Methods, Headers, Params, @RequestParam, @PathVariable--转载
  11. Metadata Lock原理7
  12. 一个灵巧的Delphi多播实事件现方案
  13. python百科
  14. logstash tag使用说明
  15. codefirst初尝试
  16. Java的socket服务UDP协议
  17. iOS 约束,设置文字控制的高度
  18. Python爬虫爬取qq视频等动态网页全代码
  19. 建造者模式(Builder)-宏观的使用角度
  20. .23-浅析webpack源码之事件流compilation(1)

热门文章

  1. swap的几点理解
  2. Nginx是什么?为什么选择Nginx做服务器软件?有什么优势?
  3. vue中Template 制作模版
  4. vue.js mixins 使用
  5. DM9000驱动网卡编程
  6. OC学习篇之---类的三大特性(封装,继承,多态)
  7. WebRequest发送请求并接收返回值
  8. python locust_TaskSet声明任务的典型方法是使用task装饰器的两种方法
  9. JAVA学习之面向对象
  10. Install Apache 2.2.15, MySQL 5.5.34 & PHP 5.5.4 on RHEL/CentOS 6.4/5.9 & Fedora 19-12 [转]