>  기사  >  백엔드 개발  >  PHP Closure 클래스의 바인딩()과 바인딩To()를 어떻게 사용하나요?

PHP Closure 클래스의 바인딩()과 바인딩To()를 어떻게 사용하나요?

WBOY
WBOY원래의
2016-10-17 09:30:131555검색

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 객체를 반환하고 클래스 범위를 사용하세요.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.