如何使用别名调用特征方法

How to call a trait method with alias

我正试图在一个名为 Page 的 class 中放置一个特征。我还需要重命名一个特征函数,这样它就不会与现有的 class 函数发生冲突。我 以为 我成功地完成了所有这些但是我得到一个指向错误位置的错误?!

Call to undefined function App\Pages\Models\myTraitDefaultScope()

我也尝试过:MyTrait\defaultScope($query) 而不是尝试重命名冲突函数。但我随后收到以下错误:

Call to undefined function App\MyTrait\defaultScope()

下面是特征和 class 包含在不同的文件中。

<?php
namespace App;

use Illuminate\Support\Facades\Auth;

trait MyTrait{
    public function defaultScope($query){
        return $query->where('active', '1')
    }
}

.

<?php namespace Modules\Pages\Models;
use Illuminate\Database\Eloquent\Model;
use App\MyTrait;

class Page extends Model {

    use MyTrait{
        MyTrait::defaultScope as myTraitDefaultScope;
    }

    public function defaultScope($query){
        return myTraitDefaultScope($query);
    }
}

我不是很擅长这个所以如果我有严重错误请不要开枪 :)

因为你正在使用特征。所以它指向当前或父class。因此,调用任何方法都应该像 $this->method($params); 语法。

当你'use'你的class中的一个特征时,class继承特征的所有方法和属性,就像如果它正在扩展抽象 class 或接口

所以,MyTrait的这个方法:

public function defaultScope($query){
    return $query->where('active', '1')
}

将由您的 Page class

继承

由于您已将此方法别名为:myTraitDefaultScope,要调用该方法,您应该以与调用 Page class 的所有其他方法相同的方式调用它:

public function defaultScope($query){

    //call the method of the class
    return $this->myTraitDefaultScope($query);
}