沐风待雨
- 沐风待雨 赞了回答
是的,可以的,但不是yii2的问题,是php4引入的时候就支持了这个事情,不过不建议,内存也没省,还容易混淆,还是不要这样用吧。
- 沐风待雨 赞了回答
在C++等其它语言中看来这属于非法调用,因为它增加了代码理解难度,代码的可读性变得很差,但在PHP中,是可以的,但也是不推荐的。之所以可以这么调用,是因为PHP的过程式语言过渡到面向对象时,对处理子类继承父类并覆盖了父类的函数,同时又想在子类中使用父类的该函数时,做的一个奇怪的决定,使用 :: 符号引用父类的该函数,该符号在这里不代表静态调用,而只是单纯的想调用父类的函数的意思,并且其calling scope 还是子类的,也就是说父类函数中使用$this->的地方仍然在子类的调用空间内。同时这种使用方法当时做了合法性判断,只用于以上的继承覆盖调用父类函数的情况,但由于效率问题,后来取消了该判断,交由程序员自己规范此类代码。
但现在来说,很多程序在非以上情况下使用这种特性,虽然php又重新用parent::方式重新定义了以上场景的使用方法,但为了向下兼容,不得已,仍然可以静态调用非静态方法,但不推荐使用,所以出现了题主遇到的警告信息。
Strict Standards: Non-static method MyClass::showConstant() should not be called statically只是一个警告,并非至命错误,仍然是可以执行成功的,yii2里面将Strict Error这个警告去掉了,所以看不见
- 沐风待雨 赞了回答
跟php版本有关,高版本的php会提示,似乎5.5以下的没有提示
- 沐风待雨 提出了问题在Yii2静态调用非静态方法为何不报错?
你看这个页面的html页面的代码
这里的action是提交到自身页面的,表单提交时你把action改成自己想提交的页面就行了, 不过在本页面的控制器上一样是可以处理的,不用非要提交到别的页面的控制器<form id="w3" class="reply-form hidden" action="/question/2624" method="post"> <input type="hidden" name="_csrf" value="VjlpSFVkQ3UeeCULBTwPEThINnEhPHNGJlUADj8RBTsfWhsQABYkJw=="> <div class="form-group field-answer-parent_id"> <input type="hidden" id="answer-parent_id" class="parent_id" name="Answer[parent_id]"> </div> <div class="form-group field-answer-reply-content required"> <textarea id="answer-reply-content" class="form-control" name="Answer[content]" aria-required="true"></textarea> <div class="help-block"></div> </div> <div class="form-group"> <button type="submit" class="btn btn-sm btn-primary">回复</button> </div> </form>
@raijin 那就好,O(∩_∩)O哈哈~
你看这个页面的html页面的代码
这里的action是提交到自身页面的,表单提交时你把action改成自己想提交的页面就行了, 不过在本页面的控制器上一样是可以处理的,不用非要提交到别的页面的控制器<form id="w3" class="reply-form hidden" action="/question/2624" method="post"> <input type="hidden" name="_csrf" value="VjlpSFVkQ3UeeCULBTwPEThINnEhPHNGJlUADj8RBTsfWhsQABYkJw=="> <div class="form-group field-answer-parent_id"> <input type="hidden" id="answer-parent_id" class="parent_id" name="Answer[parent_id]"> </div> <div class="form-group field-answer-reply-content required"> <textarea id="answer-reply-content" class="form-control" name="Answer[content]" aria-required="true"></textarea> <div class="help-block"></div> </div> <div class="form-group"> <button type="submit" class="btn btn-sm btn-primary">回复</button> </div> </form>