Laravel 매크로 정의시 $this 주위에 나오는 PhpStorm의 경고를 침묵시킵니다.

2362 단어 PHP라라벨PhpStorm

소개



Laravel의 여러 클래스에 준비되어 있는 매크로는 부족한 메소드를 서브 클래스를 만들지 않고 직접 추가하는 느낌으로 사용할 수 있어 매우 강력합니다.

실제로 실행하는 함수의 내용은 PHP의 클로저를 사용해 줍니다만, 런타임시에는 $this 를 그 클래스에 다시 묶고 있으므로, 보통 그 클래스의 메소드로 실시할 수 있는 것은 전부 할 수 있습니다. private/protected 메서드/속성에도 액세스할 수 있습니다.

그러나 PhpStorm는 다시 묶인 $this를 잘 대우할 수 없기 때문에, 많은 경고가 있습니다. 예를 들어 이전 기사 "Eloquent에서 relation의 레코드의 유무만을 subquery로 취득하고 싶다"에서 정의한 매크로는 이런 느낌이 듭니다.



침묵시키는 법



여러가지 시험해 지금 사용하고 있는 방법을 소개합니다. 아이디어로서는 「 $this 의 변화를 지정할 수 없다면, 매크로 정의를 실시하는 클래스에 필요한 메소드/프로퍼티를 annotation을 구사해 살려버리면 된다」입니다.

@mixin


$this 가 다른 클래스인 것이 우선 문제이므로 @mixin 를 사용해 매크로를 정의하는 클래스를 받아들입니다.
/**
 * ......
 * @mixin Builder
 * /

이제 public에 액세스할 수 있는 속성과 메서드는 ok입니다.

@property와 @method



그래도 private/protected 속성과 메서드에 대한 경고가 나옵니다.



이것을 침묵 시키려면 경고가 나오는 것에 대해 @property 또는 @method를 추가하십시오.
/**
 * ......
 * @property \Illuminate\Database\Query\Builder $query
 * @method parseWithRelations(array $relations)
 * @method selectExists($query, $as)
 */

단점


@mixin , @property , @method 로 추가한 것은 원래의 클래스(이 경우는 AppServiceProvider )에는 본래 존재하지 않지만, 보완 후보 등으로 나오게 되어 버립니다.
AppServiceProvider 를 호출하는 프로그램을 스스로 쓰는 일은 없기 때문에, 이 점에 대해서는 눈을 뜨고 있습니다.

결론



나가서는 안되는 경고가 많이 남은 상태라면, 정말로 문제가 있는 경고가 만약 있어도 묻혀 버려 좋지 않습니다. 꽤 무리 화려한 방법이지만 최대한 깨끗한 상태를 유지하는 것은 의미가 있다고 생각합니다.

좋은 웹페이지 즐겨찾기