RAU*_*MAR 0 php interface traits laravel
我printData()在MyInterface.php和中创建了相同的方法,MyTrait.php我printData()从我的控制器调用方法来实现MyInterface.php和使用MyTrait.php.但是这个方法总是来自MyInterface.php.请解释一下为什么会这样?
MyInterface.php
<?php namespace App\Interfaces;
interface MyInterface
{
public function printData();
}
Run Code Online (Sandbox Code Playgroud)
MyTrait.php
<?php namespace App\Traits;
trait MyTrait
{
public function printData()
{
dd("From Trait");
}
}
Run Code Online (Sandbox Code Playgroud)
HomeController.php
<?php namespace App\Http\Controllers;
use App\Interfaces\MyInterface;
use App\Traits\MyTrait;
use App\User;
class HomeController extends Controller implements MyInterface
{
use MyTrait;
public function index()
{
$this->printData();
}
public function printData() {
// TODO: Implement printData() method.
dd("From Interface");
}
}
Run Code Online (Sandbox Code Playgroud)
尝试使用它像这样:
class HomeController extends Controller implements MyInterface
{
use MyTrait{
printData as MyTraitPrintData;
}
public function index()
{
$this->MyTraitPrintData();
}
public function printData()
{
dd("From Interface");
}
}
Run Code Online (Sandbox Code Playgroud)
特征旨在提供reusable方法和属性.它们不会覆盖类自己的方法.通过printData()在内部定义,HomeController你实际上是在覆盖printData()内部MyTrait.这就是为什么你必须将它们彼此区分开来的原因.
在PHP的Horizontal Reuse中了解有关所有这些的更多信息
| 归档时间: |
|
| 查看次数: |
320 次 |
| 最近记录: |