Closure クラス

(PHP 5 >= 5.3.0)

導入

無名関数 を表すために使うクラスです。

無名関数は PHP 5.3 で実装された機能で、この型のオブジェクトを生成します。 かつてこれは、内部実装がたまたまそうなっているだけという扱いでした。 しかし今では、この事実を前提として考慮してもかまいません。 PHP 5.4 以降ではこのクラスにメソッドが用意され、 生成した無名関数をさらにコントロールできるようになります。

ここであげたメソッド以外にも、このクラスには __invoke メソッドが存在します。 これは、マジックコール を実装した他のクラスとの一貫性を保つためのものであり、 関数をコールするときにこのメソッドは使われません。

クラス概要

Closure {
/* メソッド */
private __construct ( void )
public static Closure bind ( Closure $closure , object $newthis [, mixed $newscope = "static" ] )
public Closure bindTo ( object $newthis [, mixed $newscope = "static" ] )
public Closure call ( object $to [, mixed $parameters ] )
}

目次

  • Closure::__construct — インスタンス作成を無効化したコンストラクタ
  • Closure::bind — バインドされたオブジェクトとクラスのスコープでクロージャを複製する
  • Closure::bindTo — 新しくバインドしたオブジェクトとクラスのスコープで、クロージャを複製する
  • Closure::call — Calls the closure with the given parameters and returns the result, with $this bound to the given object $to
add a note add a note

User Contributed Notes 2 notes

up
9
chuck at bajax dot us
1 month ago
This caused me some confusion a while back when I was still learning what closures were and how to use them, but what is referred to as a closure in PHP isn't the same thing as what they call closures in other languages (E.G. JavaScript).

In JavaScript, a closure can be thought of as a scope, when you define a function, it silently inherits the scope it's defined in, which is called its closure, and it retains that no matter where it's used.  It's possible for multiple functions to share the same closure, and they can have access to multiple closures as long as they are within their accessible scope.

In PHP,  a closure is a callable class, to which you've bound your parameters manually.

It's a slight distinction but one I feel bears mentioning.
up
-1
luk4z_7 at hotmail dot com
1 month ago
Scope
A closure encapsulates its scope, meaning that it has no access to the scope in which it is defined or executed. It is, however, possible to inherit variables from the parent scope (where the closure is defined) into the closure with the use keyword:

function createGreeter($who) {
              return function() use ($who) {
                  echo "Hello $who";
              };
}

$greeter = createGreeter("World");
$greeter(); // Hello World

This inherits the variables by-value, that is, a copy is made available inside the closure using its original name.
font: Zend Certification Study Guide.
To Top