它有什么作用 ? (PHP Trait)

时间:2017-07-09 20:52:19

标签: php traits

我刚发现这段代码,我不知道如何谷歌。 : - )

最后一个特质是什么? 我无法理解它的语法。 如果花括号之间的那些线是新实例的参数,那么它不应该在括号之间吗?

<?php

namespace Laravel\Dusk;

use Closure;
use BadMethodCallException;
use Illuminate\Support\Str;
use Illuminate\Support\Traits\Macroable;
use Facebook\WebDriver\WebDriverDimension;

class Browser
{
    use Concerns\InteractsWithAuthentication,
        Concerns\InteractsWithCookies,
        Concerns\InteractsWithElements,
        Concerns\InteractsWithJavascript,
        Concerns\InteractsWithMouse,
        Concerns\MakesAssertions,
        Concerns\WaitsForElements,
        Macroable {
            __call as macroCall;
        }

    // ...

}

代码来自 Laravel \ Dusk 。 这是原始GitHub repositorythe Class itself

1 个答案:

答案 0 :(得分:3)

此:     

namespace Laravel\Dusk;

use Illuminate\Support\Traits\Macroable;

class Browser
{
    use Macroable {
       __call as macroCall;
    }

    public function __call($method, $parameters)
    {
        // this is defined in THIS class
    }
}

只需对__call特征中的Macroable方法进行别名,并将其作为

提供
$this->macroCall($method, $parameters)

这是为了避免在此类和导入的特征中定义的__call方法的冲突