leozhong

leozhong

这家伙有点懒,还没写个性签名!

  • 财富值5
  • 威望值0
  • 总积分15

个人信息

  • 在C++等其它语言中看来这属于非法调用,因为它增加了代码理解难度,代码的可读性变得很差,但在PHP中,是可以的,但也是不推荐的。之所以可以这么调用,是因为PHP的过程式语言过渡到面向对象时,对处理子类继承父类并覆盖了父类的函数,同时又想在子类中使用父类的该函数时,做的一个奇怪的决定,使用 :: 符号引用父类的该函数,该符号在这里不代表静态调用,而只是单纯的想调用父类的函数的意思,并且其calling scope 还是子类的,也就是说父类函数中使用$this->的地方仍然在子类的调用空间内。同时这种使用方法当时做了合法性判断,只用于以上的继承覆盖调用父类函数的情况,但由于效率问题,后来取消了该判断,交由程序员自己规范此类代码。

    但现在来说,很多程序在非以上情况下使用这种特性,虽然php又重新用parent::方式重新定义了以上场景的使用方法,但为了向下兼容,不得已,仍然可以静态调用非静态方法,但不推荐使用,所以出现了题主遇到的警告信息。

    Strict Standards: Non-static method MyClass::showConstant() should not be called statically只是一个警告,并非至命错误,仍然是可以执行成功的,yii2里面将Strict Error这个警告去掉了,所以看不见

实习生 等级规则
15/20
资料完整度
10/100
用户活跃度
0/100

Ta的关注

0

Ta的粉丝

0

Ta的访客

1