無名関数とは

Jan 22, 2019 am 09:23 AM
無名関数

匿名関数

匿名関数 (匿名関数) はクロージャとも呼ばれ、指定された名前なしで関数を一時的に作成できます。コールバック関数の引数として最も一般的に使用される値。もちろん、他のアプリケーションもあります。

無名関数とは

匿名関数は現在、Closure クラスを通じて実装されています。

匿名関数の例

<?php
echo preg_replace_callback(&#39;~-([a-z])~&#39;, function ($match) {
    return strtoupper($match[1]);
}, &#39;hello-world&#39;);
// 输出 helloWorld
?>
ログイン後にコピー

クロージャ関数は変数の値として使用することもできます。 PHP は、この式を組み込みクラス Closure のオブジェクト インスタンスに自動的に変換します。クロージャオブジェクトを変数に代入する方法は、通常の変数代入の構文と同じですが、最後にセミコロンを追加する必要があります:

# 無名関数変数代入例

<?php
$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};

$greet(&#39;World&#39;);
$greet(&#39;PHP&#39;);
?>
ログイン後にコピー

クロージャは親スコープから変数を継承できます。このような変数は、use language 構造を使用して渡す必要があります。 PHP 7.1 以降、スーパーグローバル、$this、またはパラメーターと同じ名前を持つ変数を渡すことはできません。

親スコープから変数を継承

<?php
$message = &#39;hello&#39;;

// 没有 "use"
$example = function () {
    var_dump($message);
};
echo $example();

// 继承 $message
$example = function () use ($message) {
    var_dump($message);
};
echo $example();

// Inherited variable&#39;s value is from when the function
// is defined, not when called
$message = &#39;world&#39;;
echo $example();

// Reset message
$message = &#39;hello&#39;;

// Inherit by-reference
$example = function () use (&$message) {
    var_dump($message);
};
echo $example();

// The changed value in the parent scope
// is reflected inside the function call
$message = &#39;world&#39;;
echo $example();

// Closures can also accept regular arguments
$example = function ($arg) use ($message) {
    var_dump($arg . &#39; &#39; . $message);
};
$example("hello");
?>
ログイン後にコピー

上記のルーチンの出力は次のようになります:

Notice: Undefined variable: message in /example.php on line 6
NULL
string(5) "hello"
string(5) "hello"
string(5) "hello"
string(5) "world"
string(11) "hello world"
ログイン後にコピー

これらの変数は先頭になければなりません。関数またはクラスの Ministries ステートメント。親スコープからの変数の継承は、グローバル変数の使用とは異なります。グローバル変数は、現在どの関数が実行されているかに関係なく、グローバル スコープ内に存在します。クロージャの親スコープは、クロージャを定義する関数です (必ずしもそれを呼び出す関数ではありません)。

クロージャとスコープの例:

<?php
// 一个基本的购物车,包括一些已经添加的商品和每种商品的数量。
// 其中有一个方法用来计算购物车中所有商品的总价格,该方法使
// 用了一个 closure 作为回调函数。
class Cart
{
    const PRICE_BUTTER  = 1.00;
    const PRICE_MILK    = 3.00;
    const PRICE_EGGS    = 6.95;

    protected   $products = array();
    
    public function add($product, $quantity)
    {
        $this->products[$product] = $quantity;
    }
    
    public function getQuantity($product)
    {
        return isset($this->products[$product]) ? $this->products[$product] :
               FALSE;
    }
    
    public function getTotal($tax)
    {
        $total = 0.00;
        
        $callback =
            function ($quantity, $product) use ($tax, &$total)
            {
                $pricePerItem = constant(__CLASS__ . "::PRICE_" .
                    strtoupper($product));
                $total += ($pricePerItem * $quantity) * ($tax + 1.0);
            };
        
        array_walk($this->products, $callback);
        return round($total, 2);;
    }
}

$my_cart = new Cart;

// 往购物车里添加条目
$my_cart->add(&#39;butter&#39;, 1);
$my_cart->add(&#39;milk&#39;, 3);
$my_cart->add(&#39;eggs&#39;, 6);

// 打出出总价格,其中有 5% 的销售税.
print $my_cart->getTotal(0.05) . "\n";
// 最后结果是 54.29
?>
ログイン後にコピー

この記事は匿名関数の紹介です。困っている友人に役立つことを願っています。

以上が無名関数とはの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C++ 匿名関数の使用法と特徴 C++ 匿名関数の使用法と特徴 Apr 19, 2024 am 09:03 AM

ラムダ式とも呼ばれる匿名関数は、名前を指定せず、1 回限りの使用または関数ポインターを渡すために使用される関数です。機能には、匿名性、ワンタイム使用、クロージャ、戻り値の型推論が含まれます。実際には、ソートやその他の 1 回限りの関数呼び出しによく使用されます。

Golang関数における匿名関数適用シナリオの分析 Golang関数における匿名関数適用シナリオの分析 May 16, 2023 pm 10:51 PM

最新のプログラミング言語として、Golang (Go 言語とも呼ばれる) には多くの強力な機能があります。その中でも匿名関数はGolangにおいて非常に重要な概念であり、様々なシーンで広く使われています。この記事では、Golang 関数の匿名関数の適用シナリオを深く分析します。イベント ハンドラー イベント ハンドラーでは、匿名関数は非常に便利で実用的なツールです。カスタム ロジックは、funcmain(){bt などの匿名関数を通じてイベント ハンドラーに渡すことができます。

Python ラムダ式: 省略、簡潔、強力 Python ラムダ式: 省略、簡潔、強力 Feb 19, 2024 pm 08:10 PM

pythonLambda 式は、簡潔で読みやすく、使いやすいコードを作成するための強力で柔軟なツールです。これらは、他の関数に引数として渡したり、変数に保存したりできる匿名関数をすばやく作成するのに最適です。 Lambda 式の基本構文は次のとおりです。 lambdaarguments:expression たとえば、次の Lambda 式は 2 つの数値を加算します: lambdax,y:x+y この Lambda 式は、次のように引数として別の関数に渡すことができます。 defsum( x ,y):returnx+yresult=sum(lambdax,y:x+y,1,2) この例では

PHP7 の匿名関数とクロージャを使用して、より柔軟なコード ロジック処理を実現するにはどうすればよいですか? PHP7 の匿名関数とクロージャを使用して、より柔軟なコード ロジック処理を実現するにはどうすればよいですか? Oct 21, 2023 am 10:21 AM

PHP7 の匿名関数とクロージャを使用して、より柔軟なコード ロジック処理を実現するにはどうすればよいですか? PHP7 より前は、関数を使用して特定のロジック部分をカプセル化し、コード内でこれらの関数を呼び出して特定の関数を実装することがよくありました。ただし、コード内に一時的なロジック ブロックを定義する必要がある場合があります。これらのロジック ブロックは独立した関数を作成する必要がなく、同時にコードにあまりにも多くのグローバル変数を導入したくありません。 PHP7 では、この問題をうまく解決できる匿名関数とクロージャが導入されています。無名関数とは名前のない関数です

PHP8.0の匿名関数 PHP8.0の匿名関数 May 14, 2023 am 08:31 AM

PHP8.0 は、PHP プログラミング言語の最新バージョンです。重要な更新の 1 つは、匿名関数の改善と機能強化です。匿名関数 (クロージャとも呼ばれます) は、実行時に動的に作成して他の関数に渡したり、変数に格納したりできる特殊なタイプの関数です。 PHP では、匿名関数は高度なプログラミングや Web 開発にとって重要です。 PHP8.0 は、匿名関数をより柔軟で使いやすくする新しい構文と機能をいくつか提供します。更新内容の一部は次のとおりです: PHP8.0 の関数パラメータの型宣言、

Golang の匿名関数は複数の値を返すことができますか? Golang の匿名関数は複数の値を返すことができますか? Apr 13, 2024 pm 04:09 PM

はい、Go 言語の匿名関数は複数の値を返すことができます。構文: func(arg1,arg2,...,argN)(ret1,ret2,...,retM){//関数本体}。使用法: 戻り値を受け取るには := 演算子を使用し、複数の値を返すには return キーワードを使用します。

Python ラムダ式: プログラミングを簡単にする Python ラムダ式: プログラミングを簡単にする Feb 19, 2024 pm 09:54 PM

Python のラムダ式は、式を変数に格納し、その値を返す小さな匿名関数です。ラムダ式は、別の関数を作成することで実行できる単純なタスクを実行するためによく使用されますが、ラムダ式を使用すると、コードがより簡潔で読みやすくなります。 Lambda 式の構文は次のとおりです。 lambdaarguments:expressionarguments は Lambda 式によって受け取られるパラメータ リストで、expression は実行する必要があるコードを含む Lambda 式の本体です。たとえば、次のラムダ式は 2 つの数値を加算し、その合計を返します: lambdax,

匿名関数は golang 関数にどのように実装されますか? 匿名関数は golang 関数にどのように実装されますか? Jun 03, 2024 pm 07:09 PM

Go の関数内の匿名関数を使用すると、関数本体内で明示的に宣言せずに 1 回限りの関数を作成できます。これらは、 func キーワードを使用し、関数名を省略して定義されます。クロージャを通じて実装されます。クロージャには、関数本体コードと、匿名関数を含む関数内のすべてのローカル変数への参照が含まれます。たとえば、匿名関数を sort.Slice 関数で使用して、整数のスライスを並べ替えることができます。

See all articles