ホームページ  >  記事  >  バックエンド開発  >  PHPクロージャ function() use() での詳細な使用方法

PHPクロージャ function() use() での詳細な使用方法

步履不停
步履不停オリジナル
2019-06-24 17:15:542808ブラウズ

PHPクロージャ function() use() での詳細な使用方法

php のクロージャー (Closure) も 匿名関数 です。 PHP5.3で導入されました。

クロージャの構文は非常に単純です。注意が必要なキーワードは us​​e だけです。クロージャと外部変数を接続する手段を使用します。

##

クロージャのいくつかの機能:

1 foreach ループのコードを削減します

#1

2

3

[php ] プレーンを表示 #copy

$a

=function()use($b) {

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

##[php] プレーン # を表示##copy

// いくつかの追加製品と各商品数量を含む、基本的なショッピング カート。

// ショッピング カート内のすべてのアイテムの合計価格を計算するために 1 つの方法が使用されます。このメソッドはコールバック関数としてクロージャーを使用します。

クラス

カート

{

const PRICE_BUTTER = 1.00;

const PRICE_MILK = 3.00;

const PRICE_EGGS = 6.95;

protected $products =array();

public function add($製品,$数量)

{

##$this->製品[$product] = $数量;

}

public function getQuantity($product)

{

return

isset($this->products[$product]) ? $this->製品[$product] : #public

function getTotal($tax

)

{ $コールバック = ,

$製品)使用

($税金) , &$total

) #$pricePerItem = 定数(CLASS ."::PRICE_") .

## strtoupper($product)); $合計 = ($商品あたりの価格 *$数量) * ($tax

1.0 );

##};

#$this

->製品,$callback); #return round(

$total

, 2);; }

}

$my_cart =new Cart; // ショッピング カートに商品を追加します <p><code>$my_cart->add('バター', 1);

$my_cart->add('milk', 3);

<p><code>$my_cart->add('eggs', 6);

// 5% 消費税を含む合計価格を出力します。 .

print $my_cart->getTotal(0.05) . "\n";

// 結果は 54.29

?>

ここで getTotal 関数を変換する場合、foreach

2 を使用して 関数のパラメーターを減らす必要があります

#通常の方法を使用する場合は、html関数のパラメータに inner を入れます

#1

2

3

4

5

6

7

8

9

[php] プレーンを表示します copy

function html ($コード ,$id="" ,$クラス=""){

if ($id !=="")$id =" id = \"$id\"" ;

#$class = ($class !=="")?" クラス =\"$class\"" :">";

##$open

="< ;$code$id$class";

$close

="</$code>" ;

return

function ($inner ="")use ($open,$ close){ ##return

"$open$inner$close";}; }

そのため、コードを読み取る場合でもコードを使用する場合でも、クロージャを使用することをお勧めします

##3 Unlock再帰関数

# #1 2#

##$fib

=

function

(

$n)use(&$fib) { if($n

== 0 ||

$n == 1) return 1; return $fib(

$n

- 1) $fib($n - 2); };

エコー

$fib(2) .

"\n"

;// 2 $嘘 =$fib

;

$ fib =function

(){

die('エラー' );};//$fib 変数を書き換えます echo $lie(5);

// $fib がクロージャによって参照されているためエラー

<p>上記の質問の use には & が使用されていることに注意してください。ここで & を使用しないとエラーが発生します。n-1) 関数が見つかりません (fib の型が以前に定義されていません) </p> <p>なのでクロージャを使って解放したいのですが、関数をループするときは </p> <table cellspacing="0" cellpadding="0" border="0"> <tbody><tr class="firstRow"> <td>##1<p></p>2<p></p> を使う必要があります。 3<p></p>4<p> </p>5<p></p> </td> <td> <p>[php] プレーンなビュー <code>copy

$再帰的 =関数 () use (&$recursive){

// この関数は $recursive として利用できるようになりました

#}

##このフォーム
3

4

5

6

7

8

9

#10

##[php] プレーン

#copy

## を表示します

4 遅延バインディングについて

If使用中の変数のバインドを遅らせる必要があります。参照を使用する必要があります。そうしないと、

#1PHP 関連の技術記事の詳細については、PHP チュートリアル
を定義するときにコピーが作成されて使用されます。

2

3

4

5

6

7

8

9

10

11

12

13

[php] ビュープレーン

copy

$result

= 0;

$one

=function()

{ var_dump(

$結果 ); };

$two

=関数 ()use ($result)

{ var_dump(

#) ##$result); }; $three

=function() use (&$result) { var_dump(

##) #$result

); }; $result

;

##$one () ;

// NULL を出力: $result はスコープ ##$two();

// int(0) を出力: $result がコピーされました

$three();

// int(1)# を出力します

##参照を使用するかどうかは、呼び出し時に値を割り当てるか、宣言時に値を割り当てることを意味します。

上記はPHPクロージャを皆さんのためにまとめてみました function() use()での詳しい使い方をまとめましたので、今後皆さんのお役に立てれば幸いです。
列にアクセスして学習してください。

以上がPHPクロージャ function() use() での詳細な使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。