PHP的self::与static::,new self()和new static()之分
2016-06-03 10:37
573 查看
//后期静态绑定 class A { public static function who() { var_dump("I'm A"); } public static function test() { self::who(); } public static function staticT() { static::who(); } public function who1() { var_dump("I'm A who1"); } public static function staticT1() { // static::who1(); //who1不是static方法, 错误 (new static())->who1(); //用new static()创建新的静态域对象(具体是哪个类对象,则根据运行的类计算,跟static定义所在类无关),用->调用非静态方法 (new self())->who1(); //永远是A的who1()方法, self::只跟其定义所在类相关 } } class B extends A { public static function who() { var_dump("I'm B"); } public function who1() { var_dump("I'm B1 who1"); } } class B1 extends A { public static function who() { var_dump("I'm B1"); } public static function test() { self::who(); } } B::test(); //I'm A, 因为self::在A中,所以只会调用A的who()方法 B1::test(); //I'm B1, 因为B1\A都有self::, 但B1重载了A中的test()方法, 所以B1中的self::只会调用B1的方法 B::staticT(); //I'm B,因为static::是一个全局的静态域, 不局限于其定义所在的类,因此B重载了A的who()静态方法, static::会调用B的who() B1::staticT(); //I'm B1,与上同理 B::staticT1(); //I'm B1 who1, I'm A who1, 解释看代码 die;
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- rem : web app适配的秘密武器
- jquery高级应用之Deferred对象
- php7 读取php.ini[4]
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项
- 简单好用的PHP分页类