如何在Laravel 5.4.18中使用特征?

时间:2017-04-16 03:17:28

标签: php laravel traits

我需要一个示例,说明在何处准确创建文件,写入文件以及如何使用特征中声明的函数。 我使用的是Laravel Framework 5.4.18

- 我没有改变框架中的任何文件夹,一切都在它对应的地方 -

非常感谢你。

3 个答案:

答案 0 :(得分:10)

我在Http目录中创建了一个名为BrandsTrait.php

的特征的Traits目录

并使用它:

use App\Http\Traits\BrandsTrait;

class YourController extends Controller {

    use BrandsTrait;

    public function addProduct() {

        //$brands = Brand::all();

        // $brands = $this->BrandsTrait();  // this is wrong
        $brands = $this->brandsAll();
    }
}

这是我的BrandsTrait.php

<?php
namespace App\Http\Traits;

use App\Brand;

trait BrandsTrait {
    public function brandsAll() {
        // Get all the brands from the Brands Table.
        $brands = Brand::all();

        return $brands;
    }
}

注意:就像用某个namespace编写的普通函数一样,您也可以使用traits

答案 1 :(得分:2)

特质描述:

特质是一种在PHP等单一继承语言中重用代码的机制。特性旨在通过使开发人员能够在生活在不同类层次结构中的几个独立类中自由重用方法集,从而减少单一继承的某些限制。特性和类的组合的语义被定义为可以降低复杂性并避免与多重继承和Mixins相关的典型问题。

解决方案

在您的应用中创建一个名为Traits的目录

Traits目录(文件:Sample.php)中创建自己的特征:

<?php

namespace App\Traits;

trait Sample
{
    function testMethod()
    {
        echo 'test method';
    }
}

然后在您自己的控制器中使用它:

<?php
namespace App\Http\Controllers;

use App\Traits\Sample;

class MyController {
    use Sample;
}

现在MyController类内部具有testMethod方法。

您可以通过在MyController类中覆盖特征方法来更改特征方法的行为:

<?php
namespace App\Http\Controllers;

use App\Traits\Sample;

class MyController {
    use Sample;

    function testMethod()
    {
        echo 'new test method';
    }
}

答案 2 :(得分:1)

让我们看一个特征示例:

namespace App\Traits;

trait SampleTrait
{
    public function addTwoNumbers($a,$b)
    {
        $c=$a+$b;
        echo $c;
        dd($this)
    }
}

然后在另一个类中,只需导入特征并与this一起使用该函数,就好像该函数在该类的本地作用域中一样:

<?php

namespace App\ExampleCode;

use App\Traits\SampleTrait;

class JustAClass
{
    use SampleTrait;
    public function __construct()
    {
        $this->addTwoNumbers(5,10);
    }
}