自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类。

class A {

public static function who() {

echo __CLASS__;

}

public static function test() {

self::who();

}

}

class B extends A {

public static function who() {

echo __CLASS__;

}

}

B::test();

以上例程会输出:

A

可以实现在父类中调用子类的静态方法的作用。

后期静态绑定本想通过引入一个新的关键字表示运行时最初调用的类来绕过限制。简单地说,这个关键字能够让你在上述例子中调用 test() 时引用的类是 B 而不是 A。最终决定不引入新的关键字,而是使用已经预留的 static 关键字。

在非静态环境下,所调用的类即为该对象实例所属的类。由于 $this-> 会在同一作用范围内尝试调用私有方法,而 static:: 则可能给出不同结果。另一个区别是 static:: 只能用于静态属性。

class A {

private function foo() {

echo "success!\n";

}

public function test() {

$this->foo();

static::foo();

}

}

class B extends A {

/* foo() will be copied to B, hence its scope will still be A and

* the call be successful */

}

class C extends A {

private function foo() {

/* original method is replaced; the scope of the new one is C */

}

}

$b = new B();

$b->test();

$c = new C();

$c->test(); //fails

以上例程会输出:

success!

success!

success!

Fatal error: Call to private method C::foo() from context 'A' in /tmp/test.php on line 9

php static method,php 类方法用static::hello(); 等同于 $this-hello();吗?相关推荐

  1. pycharm提示 Method 'xxx' may be 'static'(类方法与静态方法)

    写程序时,鼠标放到最右方时,会发现pycharm提示:Method 'xxx' may be 'static',如: 这是什么原因呢? 这是因为这个方法本可以写成静态方法,但我们把它写成类方法了(就是 ...

  2. Pycharm提示方法Method xxx may be 'static'

    使用Pycharm进行Python开发时,在类中定义方法时,若该方法不涉及对属性的操作,那么Pycharm会提示Method xxx may be 'static',因为Pycharm会认为该方法是一 ...

  3. Android 解决 No static method in class La/a/a/a; or its super classes

    错误堆栈: Process: com.chaozh.iReader, PID: 24217java.lang.NoSuchMethodError: No static method getDrawab ...

  4. java.lang.IncompatibleClassChangeError: Expected static method

    版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢. https://blog.csdn.net/testcs_dn/article/details/ ...

  5. 记录no static method cannot be reference

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 报错如题: no static method cannot be reference 我一直以为是在 ...

  6. 安卓:No static method decodeBase64,commen-code包里报错的信息

    安卓:No static method decodeBase64 造成主要原因 1.导入的commons-codec的jar包与项目里的第三方sdk(比如微信和qq第三方登陆重复) 2.安卓frame ...

  7. java.lang.NoSuchMethodError: No static method ..........

    原文地址:https://www.jianshu.com/p/e1bbb7e9901d 问题 java.lang.NoSuchMethodError: No static method getFont ...

  8. 找不到静态方法:No static method metafactory

    No static method metafactory 找不到静态方法解决办法,在app中的build.gradle中加入 compileOptions {sourceCompatibility J ...

  9. Android Studio编译中出现No static method metafactory怎么办?_莫韵乐与bug的奇妙冒险

    Android Studio编译中出现No static method metafactory怎么办? 在build.gradle(:app)中的加入以下代码 android {//...compil ...

最新文章

  1. Fundebug录屏插件更新至0.4.0,修复BUG,优化性能
  2. 网站在收录后还需要做什么?
  3. json动画_three.js动画(四)
  4. 可以用在任何人身上:百战百胜人生10大成功秘诀
  5. 使用pickle模块序列化数据,优化代码
  6. 死锁与活锁的原因 与解决方法(附加“饿死”)
  7. 智能录音笔完成全系列布局,科大讯飞还发了一款转写翻译智能耳机
  8. 用CSS制作日历弹出框的心得
  9. oci8 php,PHP_试用php中oci8扩展,给大家分享个php操作Oracle的操 - phpStudy
  10. <Java设计模式>(二)UML类图 | 设计模式概述和分类
  11. ppt学习-默认设置
  12. Python学习手册之Python异常和文件
  13. 煦涵说Webpack-IE低版本兼容指南
  14. mac电脑显示隐藏文件方法
  15. 聪明的人脸识别4——Pytorch 利用Retinaface+Facenet搭建人脸识别平台
  16. 我的世界服务器怎么修复乱码,我的世界服务器打字中文怎么是乱码?
  17. mysql 创建 unique key_MySQL-创建表时一起使用时,“ PRIMARY KEY”,“ UNIQUE KEY”和“ KEY”的含义...
  18. 关注IT精英:微利时代如何赚大钱 (转载)
  19. tensorflow中tf.nn.xw_plus_b
  20. YX150C 纯IO口 8位OTP单片机

热门文章

  1. 如何从Fiori launchpad发出的请求判断出后台是哪个网关系统在响应
  2. 如何将Chrome本地安装的扩展应用导出到本地
  3. ABAP bit 操作
  4. 如何查看AWS实例上使用的key value pair名称
  5. JavaScript 里变量名前面加了大括号代表什么含义
  6. Fiori Fundamentals和SAP UI5 Web Components
  7. 如何处理Docker错误消息:please add——insecure-registry 1
  8. ABAP和XML数据格式互相转换的两种方式
  9. SAP OData编程指南
  10. CRM数据库表COM_TA_R3_ID的数据来源