Closure의 바인딩 및 바인딩To 사용법은 PHP 매뉴얼을 참조하세요. 정말 이해가 안되고 개념도 이해가 안가네요.
예를 들어 Closure::bind의 경우 매뉴얼에는 "클로저를 복사하고 지정된 $this 개체 및 클래스 범위를 바인딩합니다"라고 나와 있습니다. 이것을 이해하는 방법?
클로저와 $this는 어떻게 연결되나요? 클래스 범위는 무엇에 사용됩니까?
또한 하나는 정적 버전이고 다른 하나는 동적 버전입니다.
주어진 예를 사용하여 이러한 개념을 설명할 수 있습니까?
<code><?php class A { private static $sfoo = 1; private $ifoo = 2; } $cl1 = static function() { return A::$sfoo; }; $cl2 = function() { return $this->ifoo; }; $bcl1 = Closure::bind($cl1, null, 'A'); $bcl2 = Closure::bind($cl2, new A(), 'A'); echo $bcl1(), "\n"; echo $bcl2(), "\n"; ?></code>
감사합니다
Closure의 바인딩 및 바인딩To 사용법은 PHP 매뉴얼을 참조하세요. 정말 이해가 안되고 개념도 이해가 안가네요.
예를 들어 Closure::bind의 경우 매뉴얼에는 "클로저를 복사하고 지정된 $this 개체 및 클래스 범위를 바인딩합니다"라고 나와 있습니다. 이것을 이해하는 방법?
클로저와 $this는 어떻게 연결되나요? 클래스 범위는 무엇에 사용됩니까?
그리고 하나는 정적 버전이고 다른 하나는 동적 버전입니다. 이것은 무엇을 의미하나요?
주어진 예를 사용하여 이러한 개념을 설명할 수 있습니까?
<code><?php class A { private static $sfoo = 1; private $ifoo = 2; } $cl1 = static function() { return A::$sfoo; }; $cl2 = function() { return $this->ifoo; }; $bcl1 = Closure::bind($cl1, null, 'A'); $bcl2 = Closure::bind($cl2, new A(), 'A'); echo $bcl1(), "\n"; echo $bcl2(), "\n"; ?></code>
감사합니다
js
에서 call
이나 apply
를 사용해 본 적이 있는지는 모르겠지만, 좀 비슷해요.
사실 클로저는 객체의 멤버 메소드나 정적 멤버 메소드로 취급됩니다.
<code class="php">Closure::bind($cl1, null, 'A'); //就相当于在类里面加了个静态成员方法 Closure::bind($cl2, new A(), 'A'); //相当于在类里面加了个成员方法</code>
객체에 접근하려면 멤버 메소드에서 $this
을 사용하고, 정적 멤버 메소드는 类名::成员
메소드를 직접 사용합니다.
하지만 익명 함수이고 함수 이름이 없기 때문에 바인딩된 $this 객체를 반환하고 클래스 범위를 사용하세요.