php报错non static,在Yii2静态调用非静态方法为何不报错?

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值