【PHP】無名関数(クロージャー)のfunction useについて – 親スコープ変数を使う

無名関数(クロージャー)で親スコープの変数を使うことができます。

ここではその方法について解説します。

★ 目的

  • 無名関数で親スコープの変数を使う方法を理解する。
  • 無名関数で親スコープの変数を使えるようになる。

無名関数のスコープ

無名関数は基本的に引数で受け取った変数のみ使えます。
※ グローバル変数とは使えます。

親スコープの変数を使いたい場合は、そのまま使うことができないため、useという記述を使用します。

基本構文

親スコープの変数を使う場合の無名関数の基本構文は次のようになります。

function( 引数 ) use ( 親スコープの変数 ) {
    // ここで親スコープの変数が使えるようになる。
}

サンプルコード

次のサンプルコードをご覧ください。

ソースコード

<?php

// 親スコープの変数
$z = 8;

// 足し算の無名関数
$addition = function( $x, $y ) use ( $z ) {
    return $x + $y + $z;
};

// 無名関数を実行
echo $addition(3, 5)."\n";

?>

実行結果

16

このコードの解説は次の表の通りです。

行数概要
4行目変数$zを用意し、8を代入。
7行目〜9行目足し算する無名関数を$additionに代入。また、useで親スコープの$zを使用することを宣言。
12行目$additionの無名関数を実行し、出力。

7行目の『use ( $z )』で親スコープの変数を無名関数で使うことを宣言しているため、無名関数で$zを使用しても正常に動作します。

まとめ

無名関数で親スコープの変数を使う場合は、useを使用します。

引数を1つ増やして渡すようにする方法もありますが、無名関数の引数が決まっている場合もあるので、その際はこちらの方法を使った方が良いでしょう。