> 백엔드 개발 > PHP 튜토리얼 > PHP7 진다 클로저::호출 자바스크립트 클로저 클로저 필요 google closur

PHP7 진다 클로저::호출 자바스크립트 클로저 클로저 필요 google closur

WBOY
풀어 주다: 2016-07-29 08:52:16
원래의
1515명이 탐색했습니다.

클로저 클래스: 익명 함수(PHP 5.3에 도입됨)는 이 유형의 객체를 생성합니다.
이 클래스는 클래스나 개체에 바인딩될 수 있습니다. 즉, 사용자 정의 메서드가 클래스나 개체에 동적으로 추가됩니다.

php7 이전에 사용된 메서드

  • ::bind: 클로저를 복사하고 지정된 $this 객체와 클래스 범위를 바인딩합니다. 이 메소드는 Closure::bindTo()

  • Closure::bindTo의 정적 버전입니다. 현재 클로저 객체를 복사하고 지정된 $this 객체와 클래스 범위를 바인딩합니다. 현재 개체와 동일한 함수 본문을 갖고 동일한 변수를 바인딩하지만 다른 개체나 새 클래스 범위를 바인딩할 수 있는 익명 함수를 만들고 반환합니다.

php7은

  • Closure::call()을 추가합니다. 메서드를 닫고 쉽게 호출할 수 있도록 메서드가 임시 바인딩된 개체 범위로 추가됩니다. 성능은 PHP5.6 binTo보다 훨씬 빠릅니다.
<code><span>//bind.php</span><span><?php</span><span>/**
 * Created by PhpStorm.
 * User: bee
 * Date: 2016/4/24
 * Time: 22:35
 */</span><span><span>class</span><span>A</span> {</span><span>private</span><span>static</span><span>$sta</span> = <span>1</span>;
    <span>private</span><span>$com</span> = <span>2</span>;
}
<span>$cl1</span> = <span>static</span><span><span>function</span><span>()</span> {</span><span>return</span> A::<span>$sta</span>;
};
<span>$cl2</span> = <span><span>function</span><span>()</span> {</span><span>return</span><span>$this</span>->com;
};

<span>$bcl1</span> = Closure::bind(<span>$cl1</span>, <span>null</span>, <span>'A'</span>);
<span>$bcl2</span> = Closure::bind(<span>$cl2</span>, <span>new</span> A(), <span>'A'</span>);
<span>echo</span><span>$bcl1</span>(), <span>"\n"</span>;
<span>echo</span><span>$bcl2</span>(), <span>"\n"</span>;</span></code>
로그인 후 복사
<code><span><?php</span><span>//bindTo.php</span><span>/**
 * Created by PhpStorm.
 * User: bee
 * Date: 2016/4/24
 * Time: 22:35
 */</span><span><span>class</span><span>A</span> {</span><span><span>function</span><span>__construct</span><span>(<span>$val</span>)</span> {</span><span>$this</span>->val = <span>$val</span>;
    }
    <span><span>function</span><span>getClosure</span><span>()</span> {</span><span>//returns closure bound to this object and scope</span><span>return</span><span><span>function</span><span>()</span> {</span><span>return</span><span>$this</span>->val; };
    }
}

<span>$ob1</span> = <span>new</span> A(<span>1</span>);
<span>$ob2</span> = <span>new</span> A(<span>2</span>);

<span>$cl</span> = <span>$ob1</span>->getClosure();
<span>echo</span><span>$cl</span>(), <span>"\n"</span>;

<span>$add</span> = <span><span>function</span><span>()</span>{</span><span>return</span><span>$this</span>->val+<span>1</span>;
};
<span>$cl</span> = <span>$add</span>->bindTo(<span>$ob2</span>);
<span>//与call相比,需要增加()方可被调用</span><span>echo</span><span>$cl</span>(), <span>"\n"</span>;</span></code>
로그인 후 복사
<code><span><?php</span><span>//call.php</span><span>/**
 * Created by PhpStorm.
 * User: bee
 * Date: 2016/4/24
 * Time: 22:35
 */</span><span><span>class</span><span>Value</span> {</span><span>protected</span><span>$value</span>;

    <span>public</span><span><span>function</span><span>__construct</span><span>(<span>$value</span>)</span> {</span><span>$this</span>->value = <span>$value</span>;
    }

    <span>public</span><span><span>function</span><span>getValue</span><span>()</span> {</span><span>return</span><span>$this</span>->value;
    }
}

<span>$three</span> = <span>new</span> Value(<span>3</span>);
<span>$four</span> = <span>new</span> Value(<span>4</span>);

<span>$closure</span> = <span><span>function</span><span>(<span>$delta</span>)</span> {</span><span>return</span><span>$this</span>->getValue() + <span>$delta</span>; };
<span>//可直接调用,不用在后面增加()</span><span>echo</span><span>$closure</span>->call(<span>$three</span>, <span>3</span>);
<span>echo</span><span>$closure</span>->call(<span>$four</span>, <span>4</span>);
</span></code>
로그인 후 복사
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

위에서는 closure와 php7을 포함한 PHP7의 Closure::call을 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되길 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿