如何在 PHP 中调用“父”特征方法?

问题描述 投票:0回答:2

这是我的代码

use Illuminate\Foundation\Auth\ResetsPasswords;

class PasswordController extends Controller {
    use ResetsPasswords;
    public function postReset(Request $request){
        // do some stuff
        // ...
        return parent::postReset($request); // <-here is the problem
    }

方法

postReset
存在于
ResetsPasswords
中,但我编写的代码是在
Controller
类中寻找此方法。

有什么想法吗?

php oop inheritance traits
2个回答
6
投票
use Illuminate\Foundation\Auth\ResetsPasswords;

class PasswordController extends Controller 
{
    use ResetsPasswords {
        ResetsPassword::postReset as traitPostReset;
    }

    public function postReset(Request $request)
    {
        // Do some stuff

        // Return
        return $this->traitPostReset($request); 
    }
}

1
投票

parent::postReset($request)
之所以会出现致命错误,是因为它的父类
Controller
没有
postReset
方法。在这种情况下,即使该特征具有
postReset()
方法的实现,也不会被视为父特征。

要解决此问题,您可以为其指定不同的名称:

class PasswordController extends Controller
{
    use ResetsPasswords;

    public function postResetPassword(Request $request) // <- giving it a different name
    {
        // do some stuff
        // ...
        return $this->postReset($request); // and calling ResetsPasswords::postReset
    }
© www.soinside.com 2019 - 2024. All rights reserved.