Jam*_*mer 10 php namespaces class traits laravel
我正试图在一个名为Page的类中放置一个特征.我还需要重命名一个特征函数,以便它不会与现有的类函数冲突.我以为我成功完成了所有这些,但是我得到一个指向错误位置的错误?!
Call to undefined function App\Pages\Models\myTraitDefaultScope()
我也试过:MyTrait\defaultScope($query)而不是试图重命名冲突的功能.但是我得到以下错误:
Call to undefined function App\MyTrait\defaultScope()
下面是单独文件中包含的特征和类.
<?php
namespace App;
use Illuminate\Support\Facades\Auth;
trait MyTrait{
public function defaultScope($query){
return $query->where('active', '1')
}
}
Run Code Online (Sandbox Code Playgroud)
.
<?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);
}
}
Run Code Online (Sandbox Code Playgroud)
我不是那么棒,所以如果我有一些严重错误请不要开枪:)
当你在类中使用'trait'时,该类继承了trait的所有方法和属性,就像它扩展了一个抽象类或接口一样
所以,这种方法MyTrait:
public function defaultScope($query){
return $query->where('active', '1')
}
Run Code Online (Sandbox Code Playgroud)
将由您的Page班级继承
因为您将此方法别名为:myTraitDefaultScope,要调用该方法,您应该调用它,就像调用Page该类的其他每个方法一样 :
public function defaultScope($query){
//call the method of the class
return $this->myTraitDefaultScope($query);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2327 次 |
| 最近记录: |