PHPマスター| PHPの機能プログラミング
多くのプログラマーは機能的なプログラミングについて話すのが好きですが、実際にそれを使用したかどうかを尋ねると、ほとんどの答えは「いいえ」になります。その理由は簡単です。プログラミングの初心者が、命令的な方法で、つまりプログラムのフローチャートとステップを考えるように教えられています。したがって、この記事では、機能プログラミングのいくつかの重要な概念と、PHPで機能コードを書く方法について説明します。
キーポイント
- 機能的プログラミングは、計算を数学機能の評価として扱い、状態および可変データを回避し、機能を一流の市民として扱います。これは、関数が命令プログラミングの値のように使用できることを意味します。 機能的プログラミングの重要な概念には、不変性(一度定義されると、変数の値を変更できません)、再帰(不変性のために頻繁に使用)、純粋な関数(副作用のない関数)、および高次関数(関数を高次関数に変換するために使用できます)。
- 機能的なプログラミングにより、状態データと変数データを回避することにより、安全なプログラミングを促進するためのよりシンプルで読みやすいコードが可能になります。また、管理プロセスでの偶発的なイベントではなく、達成したいことに集中するのにも役立ちます。
- 機能的プログラミングの利点にもかかわらず、その学習曲線は、命令的に訓練された人にとっては非常に急です。機能プログラミングに関連する利点のいくつかは、従来、機能プログラミング言語として設計されていないため、PHPには適用されません。また、プログラムを作成する最も効率的な方法ではない場合があります。
機能プログラミングの重要な概念
Wikipediaは、機能プログラミングを「計算を数学的関数の評価として扱い、状態および変数データを回避するプログラミングパラダイム」と定義しています。機能プログラミングでは、機能は一流の市民と見なされますが、命令的なプログラミングでは、主にデータとデータを変更して期待される結果を達成する手順に焦点を当てます。関数が一流の市民であると言うとき、これは、命令プログラミングで値を使用するような関数を使用できることを意味します。それらは、関数へのパラメーターとして渡されたり、別の関数内で定義されたり、結果として返されることもできます。言い換えれば、「関数は値です」。これについては後でもう一度説明しますが、機能プログラミングには他にも多くの重要な概念があります。いくつかの例を挙げると:不変
不変性とは、変数の値が定義されると変更できないという動作を指します。異なる言語には異なる実装があります。たとえば、PHPでは、可変不変を保つ唯一の方法は、それを定数として定義することです。
再帰
再帰は、機能プログラミングでも顕著です。命令的なプログラミングでは、セットまたは配列を操作する必要がある場合、各要素を繰り返して一時変数を使用して現在の値を保存するために、forおよびforeachなどのループ構造を使用できます。ただし、このアプローチは、不変性のために機能的なプログラミングでは不可能です。この簿記はコールスタックを介して暗黙的に行われるため、再帰が答えです。アレイ内のすべての要素の合計を見つけるために関数を記述する必要があるとします(今のところarray_sum()の存在を忘れてください)。機能スタイルでは、次のように書きます
<?php function sum($array) { if (empty($array)) return 0; else return $array[0] + sum(array_slice($array, 1)); } $total = sum(array(1, 2, 3)); // 6 ?>
純粋な関数と参照透明性
関数が独自の外部オブジェクト(グローバル変数や静的変数など)の値を変更せず、I/O効果(ファイル、データベースなどへの書き込みなど)がない場合、関数は言われます副作用がないこと。このような関数は、純粋な関数とも呼ばれます。特定のパラメーターセットの場合、純粋な関数の出力は常に同じであり、その結果、参照透明性と呼ばれる別のプロパティが生じます。関数が透過的に参照される場合、プログラムの動作に影響を与えることなく、関数をその値に置き換えることができます。すべての数学関数は純粋な関数であり、日付関数、rand()などは非純度関数です。
Advanced Order Functions
上記の概念は、ほとんどすべてのプログラミング言語で実装できますが、一流の市民機能と高次関数は、機能プログラミングの最も顕著な2つの機能です。一流の市民機能は、関数を価値として扱うことができることを意味することを説明しました。高次関数とは、関数をパラメーターとして使用し、結果として関数を返すことができる関数です。最近追加された2つの重要な機能により、PHP:Lambda Expressionsと閉鎖に高次関数を書くことができます。
lambda関数
lambda関数(匿名関数とも呼ばれます)は、名前のない関数です。匿名関数を定義すると、関数への参照が返され、後で使用するために変数に保存されます。この変数を使用して、必要に応じて関数を呼び出します。多くの異なる言語がこの概念を採用しています。実際、毎日のJavaScriptプログラミングでLambda関数を使用して、さまざまなユーザーインタラクションやAJAXコールのコールバックとして使用する場合があります。
$("#myButton").click(function () { // do something });
関数、特に匿名関数について話すとき、可変範囲に対処する方法を理解することが重要です。たとえば、JavaScriptを使用すると、PHPはそうではありませんが、Lambdas内の外部スコープ変数にアクセスできます。 Lambdaには、通常のPHP関数と同様に、内部に独自のスコープがあります。
<?php $square = function ($arg) { return $arg * $arg; }; $value = $square(2); // 4 ?>
閉じる
時々、関数内の親スコープの変数を参照することをお勧めします。閉鎖はLambda関数に似ていますが、わずかに異なり、外部スコープで変数にアクセスできます。 PHP 5.3でも導入されたPHPの使用キーワードを使用して、「Reach Out」を使用して外部変数を結合できます。
<?php function sum($array) { if (empty($array)) return 0; else return $array[0] + sum(array_slice($array, 1)); } $total = sum(array(1, 2, 3)); // 6 ?>
部分的な関数とカレー
簡単に言えば、一部の関数は既存の関数から作成された関数であり、そのパラメーターは部分的に適用されます。作成された関数を呼び出すときに、残りのパラメーターを渡す必要があります。閉鎖を使用して、PHPに部分的な関数を作成できます。これは、その長さ、幅、高さに基づいてボックスのボリュームを見つける例です。すべてのパラメーターはオプションです。すべてのパラメーターが提供されない場合、関数は残りの必要な値を受け入れるために別の関数を返します。
$("#myButton").click(function () { // do something });
<?php $square = function ($arg) { return $arg * $arg; }; $value = $square(2); // 4 ?>
f(x、y、z)f(x)(y)(z)に似ています(ただし、php構文では、このようなネストされた関数呼び出しは許可されていません)。あなたがもっと学ぶことに興味があるなら、ティモシー・ボロンチクは実際の例でカリーについての素晴らしい記事を書いています。
長所と短所機能プログラミングの機能には、PHPで多くの実用的な用途があります。たとえば、コールバック関数を使用する場合、Lambda関数は広く使用されています。たとえば、スリムフレームワークを使用して、次のルートを定義できます。
<?php function sum($array) { if (empty($array)) return 0; else return $array[0] + sum(array_slice($array, 1)); } $total = sum(array(1, 2, 3)); // 6 ?>
Slimはコールバック関数を呼び出します。ヴァンスルーカスは、以前にラムダ機能の他の興味深いユースケースに関する記事をいくつか執筆しています。状態データと変数データを避けて、安全なプログラミングを奨励します。機能プログラミングでは、1つのことだけを行い、それぞれ副作用を行わない関数を記述する必要があります。このパラダイムがモジュール性と機能のシンプルさに重点を置いていると、異なる小さなサブルーチンに基づいてプログラムを簡単に推測できます。機能的なプログラミングは、プロセス内の偶発的なイベントを明示的に管理するのではなく、達成したいものに焦点を当てたコードを作成するのにも役立ちます(ループカウンター変数を管理する必要があることと再帰を比較してください)。ただし、機能的なプログラミングに伝統的に関連する利点のいくつかは、機能的なプログラミング言語として設計されていないため、PHPには適用されないことを忘れないでください。たとえば、副作用のない機能は並列処理に最適ですが、PHPスクリプトはこのように実行されません。また、再帰的および怠zyな機能のコストを計算することは必ずしも容易ではありません。また、内部のオーバーヘッドのために深刻なパフォーマンスの問題があるかもしれません。時には、効率を改善するために変動性のあるプログラムを書く方が理にかなっています。おそらく、機能プログラミングの最大の欠点は、命令的に訓練された人のために非常に急な学習曲線を持っていることです。しかし、全体として、機能的なプログラミングは楽しいものであり、それを学ぶことで、古い問題について考え、プログラマーとして成長するのに役立つ新しいツールが提供されます。これは普遍的なソリューションではありませんが、必要に応じて、よりクリーンでよりエレガントなPHPコードに適用できます。
概要
機能的なプログラミングは、単なるプログラミングのパラダイムではありません。機能的な思考を行うことができれば、ほとんどすべての言語で機能的にプログラムできます。この記事では、PHPの機能を使用してそれらの例を書いて提供する機能的プログラミングの基本について説明します。この記事で示されている例はあなたにとって実用的ではないかもしれませんが、機能的なスタイルがあなたが書いているコードの品質を大幅に改善できる多くの状況を見つけるでしょう。このようなケースを探してみて、機能的に考えて、楽しんでください! Fotoliaの写真
PHP機能プログラミングに関するよくある質問PHPにおける機能プログラミングとオブジェクト指向プログラミングの主な違いは何ですか?
機能的プログラミングとオブジェクト指向プログラミングは、PHPで使用される2つの異なるパラダイムです。主な違いは、州とデータの管理方法です。機能プログラミングでは、機能は一流の市民であり、国家の概念はありません。これは、同じ入力が与えられた場合、関数が常に同じ出力を生成することを意味します。一方、オブジェクト指向のプログラミングは、時間の経過とともに状態と変化を維持するオブジェクトとそれらの相互作用を中心に展開します。これにより、入力が同じであっても、異なる出力が生じる可能性があります。
機能プログラミングのPHPを始めるにはどうすればよいですか?
PHPで機能的なプログラミングを開始するには、純粋な機能、不変性、高次関数などの基本概念を理解する必要があります。次に、状態を変更せず、副作用を持たない関数の書き込みを開始できます。 PHPには、array_map
、array_filter
、array_reduce
などの機能的なプログラミングをサポートする組み込み関数があります。また、データアレイを使用するためのスムーズで便利なラッパーを提供するLaravelコレクションなどのライブラリを使用することもできます。
PHPにおける機能プログラミングの利点は何ですか?
PHPでの機能的プログラミングを使用すると、クリーナーを作成し、コードを読みやすく書くことができます。副作用や状態の変更などの一般的なプログラミングの問題を回避するのに役立ちます。これにより、コードが予測とテストを容易にすることができます。機能を簡単に結合して再利用できるため、機能的なプログラミングはより多くのモジュラーコードも可能にします。PHPを使用した機能的プログラミングの制限または課題は何ですか?
機能的なプログラミングには利点がありますが、いくつかの課題もあります。 PHPはもともと機能プログラミング用に設計されていなかったため、一部の機能は、機能プログラミング用に設計された言語ほど強力または効率的ではない場合があります。さらに、機能的なプログラミングにはさまざまな考え方が必要であり、学習曲線は、不可欠またはオブジェクト指向のプログラミングに慣れている開発者にとって急激になります。
PHPで機能的なプログラミングとオブジェクト指向プログラミングの組み合わせを使用できますか?
はい、PHPはマルチパラグラフ言語です。つまり、さまざまなプログラミングスタイルを組み合わせることができます。状態と行動の恩恵を受けるアプリケーションパーツにはオブジェクト指向プログラミング、およびステートレスの副作用のない機能の恩恵を受けるアプリケーションパーツの機能プログラミングを使用できます。これにより、アプリケーションのすべての部分に最適な方法を選択する柔軟性が得られます。
機能プログラミングはPHPのパフォーマンスにどのように影響しますか?
PHPパフォーマンスに対する機能プログラミングの影響は異なる場合があります。場合によっては、機能的なプログラミングは、状態の変更や副作用を回避するため、より効率的なコードを記述できます。ただし、他の場合は、通常、既存のオブジェクトを変更するのではなく、新しいオブジェクトを作成することを伴うため、非効率的な場合があります。コードを分析およびテストして、パフォーマンス要件を満たしていることを確認することが重要です。
PHP機能プログラミングを学習するための良いリソースは何ですか?
PHP機能プログラミングを学習するために利用できるリソースがたくさんあります。いくつかの優れた出発点には、PHPマニュアル(機能プログラミングに関するセクションがあります)と、オンラインチュートリアルや記事が含まれます。 Gilles CrettenandによるPHP機能プログラミングなど、このトピックに関する本もあります。
PHPのWeb開発に機能的なプログラミングを使用できますか?
はい、PHPのWeb開発に機能的なプログラミングを使用できます。機能的なプログラミングは、Web開発環境で有益なクリーナーとよりモジュラーコードの作成に役立ちます。ただし、PHPはマルチパラグラフ言語であるため、オブジェクト指向のプログラミングなどの他のプログラミングスタイルも使用できます。
PHPの機能プログラミングでのエラー処理を処理する方法は?
機能プログラミングでは、通常、モナドを使用してエラー処理が行われます。これは、値ではなく計算を表すことができるデータ構造です。 PHPでは、エラー処理のためにおそらくモナドを使用できます。これにより、操作をリンクでき、操作が失敗した場合、チェーンの残りの部分がスキップされます。
PHPの機能プログラミングは大規模なアプリケーションに適していますか?
機能プログラミングは大規模なアプリケーションに使用できますが、アプリケーションの特定の要件に依存します。機能的なプログラミングは、大規模な環境で有益なクリーナーで、よりモジュラーコードを書き込むことができます。ただし、場合によっては非効率的である可能性があるため、トレードオフを検討することが重要です。
以上がPHPマスター| PHPの機能プログラミングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

php8.1の列挙関数は、指定された定数を定義することにより、コードの明確さとタイプの安全性を高めます。 1)列挙は、整数、文字列、またはオブジェクトであり、コードの読みやすさとタイプの安全性を向上させることができます。 2)列挙はクラスに基づいており、トラバーサルや反射などのオブジェクト指向の機能をサポートします。 3)列挙を比較と割り当てに使用して、タイプの安全性を確保できます。 4)列挙は、複雑なロジックを実装するためのメソッドの追加をサポートします。 5)厳密なタイプのチェックとエラー処理は、一般的なエラーを回避できます。 6)列挙は魔法の価値を低下させ、保守性を向上させますが、パフォーマンスの最適化に注意してください。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。
