首先阐明结论,在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 static,PHP面向对象中new self( )和 new static( ) 的区别相关推荐

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

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

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

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

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

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

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

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

  5. 【Java】:类变量、类方法(static在类中的用法)及main函数细节

    前言 经过一个多月的学习,终于进入了学习Java的第二阶段,本篇博客主要介绍Java面向对象高级部分中 类变量.类方法 的使用,以及 main函数语法 剖析,主要设计 static关键字 在类中的使 ...

  6. Java面向对象中的注意事项

    关于Java面向对象编程,不可能是一开始就全部学完的,他会伴随着你的Java编程的整个过程,在以后的学习或者工作中,你才能够越来越深入的去理解面向对象这个思想.Object Oritended Pro ...

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

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

  8. java static用法_Java中static关键字的作用和用法详细介绍

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

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

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

最新文章

  1. Scrum团队初建的十一件事——Scrum中文网
  2. 设置Android设备在睡眠期间始终保持WLAN开启的代码实现
  3. 本年度最成功科技IPO企业之一:Twilio股票一月暴涨167%
  4. crontab命令简介
  5. vscode / ubuntu 下编译和调试 C/C++ 方法
  6. 揭秘MySQL生态重要功能,X-Engine引擎核心能力——OnlineDDL
  7. 获取商品列表(Feign)
  8. 三电平igbt死区时间计算_IGBT基础与运用-2
  9. C语言中auto,register,extern,static【转】
  10. 谈谈能带来高薪报酬的软件技术
  11. 速修复!Netgear 61款路由器和调制解调器中存在多个严重的预认证RCE漏洞
  12. 关于python列表去重复后按照元列表序列输出
  13. python dict setdefault_Python dict setdefault()用法及代码示例
  14. python爬虫爬取网站视频
  15. IBM将花2.5亿收购第二家以色列移动软件开发商
  16. Canvas(画布)的使用
  17. SQL server和SSMS的安装及使用说明
  18. Javase day06_汇总
  19. 免费AI改图神器,一个万能宝藏在线工具箱
  20. Golang | 优雅地定义枚举类型

热门文章

  1. 电脑无法识别u盘怎么办_电脑无法识别U盘?5步操作让办公族轻松搞定!
  2. Spring源码:AOP(1)
  3. winxp不加载oracle服务器,WinXP系统开机提示“windwos不能加载用户的配置文件”怎么办...
  4. [蓝桥杯][2016年第七届真题]密码脱落(记忆化搜索)
  5. 公共钥匙盒(排序CCF)
  6. excel 如何用vba将某一条记录移动到另一张工作表中_EXCEL常用快捷键
  7. php java 单点登录_php实现多站点共用session实现单点登录的方法详解
  8. 【算法竞赛学习】学术前沿趋势-论文作者统计
  9. html无限添加元素,jquery--html【添加元素】
  10. html中超链接使用_HTML实例源码