首先阐明结论,在PHP中 self指向定义了当前被调用方法的类, static指向调用当前静态方法的类。

接下来通过一个例子来证明上面的结果

class A
{public static $_a = 'Class A';public static function echoProperty(){echo self::$_a . PHP_EOL;}
}class B extends A
{public static $_a = 'Class B';
}$obj = new B();
B::echoProperty();//输出 Class A

之所以会这样是因为使用self:: 或者__CLASS__对当前类的静态引用,取决于定义被调用方法所在的类,将上面Class A的方法echoProperty做一下修改变成:

class A
{public static $_a = 'Class A';public static function echoProperty(){echo static::$_a . PHP_EOL;}
}
//再次调用B::echoProperty将输出   'CLASS B'

为了避免上面第一个例子中看到的子类重写父类的静态属性后,使用继承来的方法仍然访问父类的静态属性, PHP5.3增加了一个新的语法:后期静态绑定(Late static binding), 使用static关键字替代self关键字,使得static指向与get_called_class()返回的相同的类,即当前调用静态方法的类, 该关键字对于静态方法的访问同样有效。

下面的例子更好的说明了new self()和new static()之间的差异(后者使用了PHP的后期静态绑定指向调用方法的当前类)

class A
{public static function get_self() {return new self();}public static function get_static() {return new static();}
}class B extends A {}echo get_class(B::get_self());  // A
echo get_class(B::get_static()); // B
echo get_class(A::get_self()); // A
echo get_class(A::get_static()); // A

PHP面向对象中new self( )和 new static( ) 的区别相关推荐

  1. php new static,PHP面向对象中new self( )和 new static( ) 的区别

    首先阐明结论,在PHP中 self指向定义了当前被调用方法的类, static指向调用当前静态方法的类. 接下来通过一个例子来证明上面的结果 class A { public static $_a = ...

  2. php new static,PHP中new self()和new static()的区别用法

    浅谈PHP中new self()和new static()的区别 本文介绍了PHP中new self()和new static()的区别,分享给大家,也给自己留个笔记. 1.new static() ...

  3. php 静态类内存,php面向对象中static静态属性与方法的内存位置分析

    本文实例分析了php面向对象中static静态属性与方法的内存位置.分享给大家供大家参考.具体如下: static静态属性的内存位置-->类,而不是对象.下面做测试来证明一下 header(&q ...

  4. php self this static,php面向对象中self和static的区别

    在php的面向对象编程中,总会遇到 class test{ public static function test(){ self::func(); static::func(); } public ...

  5. PHP中self和static的区别,php中self与static的区别

    原文链接,猛击这里. php中self与static的区别 通过一些示例,我们可以很容易看出self和static的区别.假定我们有class Car – 它有两个方法,model和getModel. ...

  6. 工作单元php,PHP面向对象中的工作单元是什么

    PHP面向对象中的工作单元是什么 发布时间:2020-12-18 14:59:32 来源:亿速云 阅读:89 作者:Leah 本篇文章为大家展示了PHP面向对象中的工作单元是什么,内容简明扼要并且容易 ...

  7. python中如何创建类的对象_python面向对象中如何建立具体的对象?

    我们现在眼前所能看到的事物,都是具体的对象.很多小伙伴在面向对象中创建对象,其实都停留在对象名称的建立,计算机中并没有具体对象的描述属性.我们想要使用python中的类,建立的对象就需要是具体的.下面 ...

  8. Python面向对象中反射和双下的正确用法

    一.反射 反射:程序可以访问,检测和修改它本身状态或行为的一种能力(自省) python面向对象中的反射:通过字符串的形式操作对象相关的属性 python中的一切事物都是对象(都可以使用反射) 四个可 ...

  9. 图解面向对象中的聚合与耦合概念

    图解面向对象中的聚合与耦合概念 简单理解聚合与耦合 在面向对象的设计中,我们经常会听到或用到聚合.耦合的概念.面向对象的目标就是设计出高聚合.低耦合的程序.然而,究竟什么是 聚合.什么是耦合,恐怕每个 ...

最新文章

  1. HMM(隐马尔科夫)用于中文分词
  2. 逃离深圳,一个程序员的选择
  3. django获取客户端真实IP
  4. python测试开发自学教程-2019第一期《python测试开发》课程,10月13号开学
  5. UA MATH636 信息论8 线性纠错码的解码算法
  6. linux下raid5的配置
  7. 数据结构入门最佳书籍_最佳数据科学书籍
  8. 计算一个人出生了多少天(炸窝)
  9. iOS中UIKit继承结构
  10. 随想录(OllyDbg和IDA Pro的配合使用)
  11. 揭秘Keras推荐系统如何建立模型、获取用户爱好
  12. 地表反照率数据、地表净辐射通量、太阳辐射数据、地表温度、地表显热通量、NDVI、NPP、土地利用数据
  13. 前端javascript解压zip文件[zip.js] 附上可用demo
  14. ArrayList集合排序方式总结
  15. [WebKit] JavaScriptCore解析--基础篇(二)解释器基础与JSC核心组件
  16. 毕设论文-word格式问题
  17. 如何实现 iOS 短视频跨页面的无痕续播?
  18. 某美颜app sig参数分析
  19. Shamir秘密共享算法
  20. DySAT: Deep Neural Representation Learning on Dynamic Graph via Self-Attention Networks

热门文章

  1. 第 9 章 代码审查制度
  2. phalcon: Profiling分析 profilter / Plugin结合,dispatcher调度控制器 监听sql执行日志
  3. ActiveMQ学习总结(5)——Java消息服务JMS详解
  4. 四种launchMode启动方式
  5. iOS AFN监听网络状态
  6. 《MapReduce 2.0源码分析与编程实战》一第2章 入门
  7. PHPSession-完全PHP5之session篇
  8. loadrunner如何监控linux,以及重点指标分析
  9. μC/OS-II硬件软件体系结构
  10. 更新MYSQL生成日历表,支持跨年份 存储过程