PHP中静态与非静态的那些事情
程序员文章站
2022-04-23 16:37:02
...
PHP中静态与非静态的那些事儿
静态也能调用非静态方法
废话少说,直接看代码:
error_reporting(E_ALL);// 将所有错误信息报出来class Test{ public static function test1() { //$this->test2();// 这样子肯定是报错的,静态方法不能使用$this // 如果非要在这里调用test2(),可以使用以下方式,称为方式一 $instance = new Test(); $instance->test2(); // 或者使用更简单的方式,称为方式二(PHP会给出调用警告) self::test2(); } public function test2() { echo 'test static function'; }}Test::test1();
这里要说明几点,
1. 方式一这种就是说创建一个对象,然后来调用这个对象的方法,这个不冲突的。
2. 至于方式二为什么能够这么调用非静态方法,这个请参考鸟哥的一篇文章:PHP的Calling Scope
方式二,产生如下警告:
所有大家在实际的应用中, 大家 尽量要避免 使用”::”来调用一个非静态的方法。
非静态方法调用静态方法竟如此多娇
想想我也是醉了,竟然还能使用$this来调用非静态方法。且看代码:
error_reporting(E_ALL);class Test2{ public static function test1() { echo 'good test
'; } // 大家可以想象这里我为什么不写test2()这个方法名呢?直接从1蹦跶到了3 public function test3() { self::test1();// 这个可以吧,没有问题 static::test1();// 这个也不解释了 $this->test1();// 重点说说它 }}$Obj = new Test2();$Obj->test3();
写代码验证,这种$this竟然能够调用静态方法时,着实让我吃了一惊。仔细想想也是合理的,为什么合理?
且听小弟慢慢道来。
大家有没有这样调用过代码:
$obj = new Test2();$obj->test1();
OK,在php中可以使用静态方式调用非静态方法,也可以使用非静态方式调用静态方法。多公平的一种语言呀,真是爱(che)死(dan)你了!
如果你能够理解上面这种写法,相信对于 $this->test1()
应该也能理解了吧, $this
相当于当前调用的对象,可以理解为此处new出来的 $obj
。作为一个对象肯定是可以调用它内部的所有方法吧?不解释了,说多了都是废话。
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
上一篇: 深入理解python多进程编程