关于静态访问符 :: 的调用问题

:: 为什么可以调用可以调用非静态方法,$this可以调用静态方法

class B extends A{
    public function  printOut() {
        echo ('printOut');
    }
    public static  function printOut2(){
        echo('printOut2');
    }
    public function  test(){
        self::printOut();
        $this->printOut2();
    }
}
$b = new B();
$b->test();

//正常输出 
//printOutprintOut2
讨论数量: 10
ShiKi

就是支持这种写法啊.

2年前 评论

诶,我去,没看出来还可以这样,也太灵活了吧,一般不是下面这种写法吗

<?php
class B {
    public function  printOut() {
        echo ('printOut');
    }
    public static  function printOut2(){
        echo('printOut2');
    }
    public function  test(){
        $this->printOut();
        self::printOut2();
    }
}
$b = new B();
$b->test();
2年前 评论

这样调用会有警告的

2年前 评论
winson_lhs (楼主) 2年前
zhuzixian520

低版本的php,也经常会有这样的情况,但是应该会有warning的提示

2年前 评论
winson_lhs (楼主) 2年前

php8🙅🏻‍♀️🚫

2年前 评论

在动态的方法里面本来就可以用self调用当前类的静态方法,反过来在静态方法里面就不能用 $this调用当前类的方法

2年前 评论
Junwind

PHP手册有说明
file

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!