如何使用别名调用特征方法
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);
}
我正试图在一个名为 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);
}