<p>클래스 내에서 Ctrl+클릭 시 양방향 링크가 설정되도록 클래스 속성을 메소드 매개변수에 바인딩하는 방법이 있습니까? </p>
<pre class="brush:php;toolbar:false;">클래스 첨부 파일이 저장소를 확장합니다.
{
공개 문서 $documents;
공개 함수 fromDocuments(호출 가능 $scope)
{
$this->scopeOnRepoProperty($scope, '문서');
}
}
</pre>
<p>제 말은 이 경우에scopeOnRepoProperty() 메소드의 두 번째 매개변수 문서가 $documents 속성을 참조해야 한다는 것입니다. <br /><br />더 넓은 맥락은 다음과 같습니다. <br />문제는 코드의 상당 부분이 매우 유사하다는 것입니다. 즉, 대부분의scopeXXX/fromXXX 메소드는 유사한 작업을 수행합니다. 즉, 속성 저장소 메소드에 매개변수로 전달됩니다. 예를 들어 위의 예에서는 $scope($this->documents)가 실행되고 $this->documents가 초기화되지 않으면 새 인스턴스가 생성됩니다. <br /><br />따라서 코드는 다음과 같습니다:</p><p><br /></p>
<pre class="brush:php;toolbar:false;">공개 함수 fromDocuments(호출 가능 $scope)
{
if (!isset($this->documents)) {
$this->documents = 새 문서();
}
$scope($this->문서);
}
</pre>
<p>if 문을 작성하고, 새 객체를 생성하고, 매번 메소드를 호출하는 것을 피하고 싶었기 때문에 호출 가능한 객체, 속성 이름 및 유형 리플렉션을 허용하는 메소드를 사용하면 이를 수행할 수 있다고 생각했습니다. 수업 이름. </p><p>코드는 정상적으로 실행되지만 불행하게도 이 접근 방식으로 인해 이러한 속성에 대한 바인딩이 손실됩니다. 이전 버전에서는 $this->documents라서 링크가 있었으나 이제는 그렇지 않습니다.
이를 달성할 수 있는 방법이 있는지 알고 싶습니다. 어떤 아이디어가 있나요?
으아악
이렇게 하면 참조에 사용하려는 속성과 클래스가 모두 포함됩니다. 이는 일반적으로 두 가지를 모두 나타내는 문자열을 사용하는 것(또한 구체적인 속성 및 구체적인 클래스 이름에 대한 참조를 잃는 것)보다 낫습니다.
여기서 수행하는 작업을 지연 초기화라고도 합니다. 문제는 클래스에 new 키워드가 사용되어 코드를 테스트하기 어렵다는 것입니다. 그래도 이는 문자열 작업에 비해 개선된 것입니다.
PhpStorm
의 새로운 @mixin에 관심이 있으실 수도 있습니다.이를 통해 콜러블 삽입을 생략할 수 있지만 이 접근 방식으로 정확히 무엇을 달성하고 있는지 완전히 명확하지 않으므로 이는 단지 추가 팁일 뿐이며 사용자의 요구 사항에 적합하지 않을 수 있습니다.
참조: