PHP 学習ガイド - 第 8 章 (1)

黄舟
黄舟オリジナル
2016-12-23 09:51:14986ブラウズ

関数の定義と応用

この章のキーポイント

2 組み込みのPHP関数を使用する

2 オンライン関数マニュアルを参照する

2 ユーザー定義関数

2 スキルを購入する: 変数パラメーター、パラメーター 呼び出しと変数の参照関数


どのプログラミング言語にも、何らかのプログラム抽象化処理機能 (手続き型抽象化。これは、他のプログラム コード セクションを作成するときにアクセスできるように、プログラム コードの特定のセクションに名前を付けること) を備えています。一部のスクリプト言語にはこの機能が欠けており、私たちの経験では、これにより複雑なサーバー側のコードがすぐに管理できなくなる可能性があります。


この抽象的な処理を提供するために PHP で使用されるメカニズムが関数です。実際には、PHP には 2 種類の関数があり、1 つは PHP 開発者によってすでに言語に組み込まれているもの、もう 1 つは各 PHP プログラマーによって定義されています。


この章では、PHP が提供する多数の関数の使用方法を見てから、独自の関数を定義する方法を学びます。幸いなことに、組み込み関数を使用することと独自の関数を定義することの間に違いはありません。


関数の使用

関数を使用 (または呼び出し) するための基本的な構文は次のとおりです:


function_name(expression_1,expression_2,…,expression_n)

これは、入力操作によって区切られた括弧とカンマが後に続く関数名です。式を入力すると、リスト形式 (関数パラメータと呼ばれます) が表示されます。特定の定義に従って、呼び出し関数はパラメーターを受け取らないことも、複数のパラメーターを同時に取り込むこともできます。


PHP は関数呼び出しに遭遇すると、まず各パラメーター操作を評価し、次にこれらの値を関数への入力として使用します。関数が実行された後の戻り値 (戻り値がある場合) は、関数式全体の結果です。


以下にリストされている例はすべて、PHP の組み込み関数の有効な呼び出しメソッドです:


sqtr(9) //平方根関数、結果は「3」です

rand(10,10+10) / / "10" から "20" までの値を返します

strlen("This has 22characters") //値 "22" を返します

pi() //p の近似値を返します


これらの関数が呼び出されます引数はそれぞれ 1、2、1、0 です。

戻り値と副作用

各関数呼び出しは (他の操作と同様に) PHP 操作とみなされます。プログラム コードに関数を含める理由は 2 つだけです。戻り値を取得するため、または副作用を取得するためです。

関数の戻り値は関数の演算値です。この値は、他の操作の評価結果と同じように使用できます。たとえば、次のように変数に割り当てることができます。 complex 演算式では、次のようになります:


$estimate = sprt($estimate)* sqrt($estimate)


この関数は、ファイルやデータベースへのデータの書き込みなど、さまざまな副作用を実現するためにも使用できます。操作、およびブラウザ ウィンドウに出力されたコンテンツの表示。コールバックと副作用を同時に使用することは可能です。例えば、副作用のある関数を使用し、同時に値を返して、関数が正常に実行されているかどうかを確認することがよくあります



関数の結果は任意の型にすることができます。配列型は通常、複数の値を返す関数として使用されます。


関数マニュアル


PHP のアーキテクチャは非常にスマートに設計されているため、他の開発者による拡張が簡単です。オリジナルの PHP 言語自体は理解しやすく、非常に柔軟です。ほとんどの PHP 関数は多数の組み込み関数として存在します。これは、開発者が自由に新しい組み込み関数を追加して PHP に貢献できることを意味します。ユーザーが依存する可能性のある PHP の部分は変更されないため、これは素晴らしいことです。


この本では多くの組み込み関数を取り上げており、その一部についてはオンライン マニュアルよりも詳細に説明していますが、http://www.php.net で提供されているマニュアルは依然として機能情報の重要な参照リソースです。この本では、抜粋したいトピックをある程度拡張しますが、PHP マニュアルの内容は、PHP のあらゆる側面に関する最も完全なリファレンスであり続けます。私たちはこの本を PHP の将来のバージョンに合わせて最新の状態に保ちたいと考えていますが、オンライン ガイドでは、開発中の機能を含む新しい PHP 機能に関する最新情報を提供します。したがって、時間があるときに PHP 公式 Web サイトやオンラインで提供されているさまざまなリソースを参照すると非常に役立ちます。


ただし、以下の情報は本書の完成時点で正しいものです (第 2 版は 2002 年に再版されました)。ただし、オンライン マニュアルのバージョン更新や再編成により、一部の詳細が古くなったり、適用されなくなったりする場合があります。


オンライン マニュアルを検索したい場合は、http://www.php.net Web サイトにアクセスし、右上のナビゲーション バーにある「documentaion」オプション ラベルを選択します。これにより、さまざまな形式とファイルが含まれるディレクトリにリダイレクトされます。ユーザーマニュアル情報へのリンク。私たちが見たいのは、注釈付きマニュアル (現在は [ドキュメント] ページの [オンラインで表示] オプションにリンクされています) です。これにより、ユーザーは独自の注釈データを各ページに投稿できます。 [注意してください: 手動注釈システムは質問を投稿する場所ではありません。使用方法について質問がある場合は、www.php.net の「サポート」タブにあるメーリング リストのセクションを参照するか、PHP リソースに関する本書の付録 D を参照してください。マニュアルアノテーションシステムは、ユーザーが自分の言葉で説明し、理解した上でコメントする必要があるものであり、これは将来的には正式なバージョンになる可能性があります。これは貢献するのに最適な方法であり、混乱や考えられる問題を指摘するのにも最適な場所ですが、すべて「英語」で行われます。 】

ユーザーマニュアルの大部分は機能のテスト資料であり、各組み込み機能には個別の説明ページがあります。各ページは関数名と 1 行の説明で始まり、次に C スタイルの関数ヘッダー宣言 (次のセクションで説明)、その後に少し長い説明 (おそらく 1 つまたは 2 つの例)、そして (Notes マニュアル内)ユーザーからのコメントや意見レポートです。


マニュアルのヘッダー

C 言語の関数ヘッダーに慣れていない人にとって、関数マニュアルの最初の部分はわかりにくいかもしれません。基本的な形式は次のとおりです:

return-type function-name(type argl,type2 arg2,…);

これは、値型の値、関数名、期待されるパラメータの型などを返す期待される関数を示します。

以下は基本的なヘッダーの説明です:

string substr (string string,int startl [,int length]);

これは、関数 substr が文字列を返し、文字列と 2 つの整数をパラメータとして取得することを期待することを意味します。 。実際、length の両側の角かっこは、このパラメーターがオプションであることを示しているため、substr を呼び出すときに、文字列 string と int 整数、または string string と 2 つの int 整数を使用できます。

C とは異なり、これらの手動ヘッダーで宣言されたパラメーターの型は厳密には必要ありません。引数として数値を指定して substr を呼び出した場合、PHP は関数の実行を開始する前に最初の引数を文字列に変換します。ただし、パラメータの型は関数作成者の本来の意図を反映しています。また、期待どおりの動作を保証するには、マニュアルに指定されている型に従って関数を使用するか、型変換に関する事項を十分に理解した上で使用することが最善です。結果。

一般的に、関数マニュアルで使用される型名は、6 つの基本型、またはそのエイリアスのいずれかです: integet (または int)、double (または float、real)、Boolean、string、array、object、resource、および NULI。さらに、void とmixed の種類も確認できます。 Viod タイプの関数は値をまったく返しません。混合パラメーター タイプは、パラメーターがどのようなタイプでもよいことを意味します。

関数マニュアルを検索

マニュアル内の関数に関する情報をクエリする最良の方法は何ですか?それは主にあなたの好奇心と、どのような部分に興味があるかによって決まります。関数に関する最も一般的な質問は次のとおりです:

X 関数を使用したいのですが、どう使用すればよいですか?

特定の Y タスクを完了する必要があります。このタスクを完了するのに役立つ機能はありますか?

最初のケースでは、オンライン マニュアルの完全版では、関数名に基づいた自動クエリが提供されます。右上のナビゲーション バーの下にある [検索] テキスト ボックスのデフォルトの検索モードは関数の名前であり、関数が見つかると、その関数を表示する Web ページが表示されます ([検索] を選択することもできます)。他の検索オブジェクト (Web サイトのメーリング リスト全体を含む)。これは、必要な関数の名前が分からないが、必要な関数の大まかな名前は推測できる場合に検索するのに適しています)。

2 番目のケースで探している場合は、108 章に分かれている関数リファレンス (PHP マニュアルの項目の 1 つである関数リファレンス) の階層構造を使用するのが最適です。たとえば、前述の substr 関数は、「ドキュメントのヘッダー」セクション内の「文字列関数」セクションにあります。 『関数リファレンス』の章のリストを参照して、実行しようとしているタスクに最も適した章を選択できます。または、実行中の作業と同じスコープに含まれる可能性のある関数の名前をたまたま知っている場合は、Quick Ref ボタンを直接押して、関連する章に接続することができます。

ユーザー定義関数

PHP ではユーザー定義関数は必要ありません。基本的な言語構造と多数の組み込み関数のみを使用して、有用な Web サイトを構築することもできます。ただし、プログラム コードの内容がますます長くなり、理解や管理がますます困難になってきている場合は、プログラム コードの一部を関数に変換することを検討する必要があります。

関数とは何ですか?

関数は、プログラム コードのブロックをラップして名前を付けるプログラムを作成する方法です。これにより、将来、たった 1 行のプログラム コードでそのブロックを簡単に使用できるようになります。プログラムを作成するときに、プログラム コード ブロックが多くの場所で使用される場合は、関数が最も効果的な方法ですが、たとえ 1 回しか使用されなかったとしても、関数の作成と記述はプログラムの構造を助けることになります。プログラムコードがより読みやすくなります。

関数定義構文

関数は次の形式で定義できます:

function 関数名($argument1, $argument2,..)

{

statement1;

statement2;

関数定義は 4 つの部分で構成されます:

専用の単語「関数」

関数に付けられた名前

関数のパラメーター リスト (カンマで区切られた $ 記号変数)

関数本体 (大きな A シリーズ)変数名と同様に、関数名も英語の文字、数字、アンダースコア (_) で構成する必要があり、数字で始めることはできません。変数名とは異なり、関数名は保存前に小文字に変換されるため、関数名は大文字と小文字が区別されないと考えることができます。

定義された関数が呼び出されたときに何が起こるかは、次のように簡単に説明されます。

1. PHP は名前で関数を検索します (関数が定義されていない場合は、エラー メッセージが表示されます)。

2. PHP は、関数定義のパラメーター リスト内の変数 (または「仮パラメーター」) をパラメーターの値 (または「実際のパラメーター」) に置き換えます。

3. 関数本体のナラティブステートメントを実行します。実行がステートメント内の「return」ステートメントに到達すると、関数は実行を停止し、指定された値を返します。それ以外の場合、関数は最後のステップまで実行され、値は返されません。

経験豊富なプログラマは、前の説明が参照呼び出しではなく値呼び出しを暗示していることに気づくかもしれないことに注意してください。この章の最後のセクションでは、それらの違いを説明し、参照による呼び出し方法を示します。

関数定義の例

架空の例として、ボトル入り飲料を何本購入するかを決定するのに役立つように設計された次のプログラム コードを想像してください (おそらく将来、スーパーマーケットや古い製品ですでに使用されているでしょう)。購入価格の比較を表示するには、ワイヤレス Web ブラウザを破棄します)。

$リットル_1 = 1.0;

$価格_2 = 2.09;リットル_2 = $価格_2 / $リットル_2;

if($per_literl<$per_liter2)

print(“最初の取引の方が良いです! < BR >”);

else

print(“2 番目の取引の方が良いです! < BR >”) ;

このタイプの比較は Web ページのプログラミング コードのいたるところで見られるため、これを再利用可能な関数にしたいと考えています。これを行う 1 つの方法は、例を書き換えることです。価格_2/$金額_2;

$単価_1 = 1.59;価格_2 = 2.09;

if(better_deal($liters_1,$price_1,

$liters_2,$price_2))

print(“最初の取引の方が良いです!< BR >”);

else

price(“2番目の取引” is better!< BR >”);

better_deal 関数は、前のプログラム コードで算術演算と比較を実行する 3 行のコードを抽出し、パラメーターとして 4 つの数値を返します。式。他のブール値と同様に、if ステートメントのテスト部分に埋め込むことができます。この関数は元のプログラム コードよりも長くなりますが、この方法で書き直すことには 2 つの利点があります。1 つは、計算を変更する場合に、プログラム内の他の複数の場所でこの関数を使用できることです (プログラム全体の行数を節約できる)。この方法では、1 か所を変更するだけで済みます。

価格比較でどちらの取引がよりコスト効率が高いかを出力する場合は、以下に示すように、出力表示の説明文を関数に直接入れることができます:

function print_better_deal($amount_1,$price_1) ,

$amount_2,$price_2)

{

$per_amount_1 = $price_1 / $amount_1;

$per_amount_2 = $price_2 / $amount_2)

print(「 ;

$liters_2 = 1.5;

$price_2 = 2,09;

print_better_deal($liters_1,$price_1,

$liters_2,$price_2);

最初の関数はreturn ステートメントを使用してブール値の結果を転送し、その結果が if ステートメントのテストで使用されます。 2 番目の関数には、ユーザーのブラウザにテキストを表示するという副作用が完了するため、return ステートメントがありません。この関数の最後のステートメントのとき
ステートメントが実行されると、PHP は関数呼び出しに続いて次のステートメントを実行します。

仮パラメータと実パラメータの比較

前の例では、関数に渡されるパラメータは「変数」でしたが、必ずしもそうではありません。実際の引数 (つまり、関数呼び出しの引数) には、評価できる任意の式を指定できます。この例では、次のように、変数の代わりに関数呼び出しに数値を渡すことができます:

Print_bettet_deal(1.0,1.59,1.5,2.09);

また、この例には 2 つの実際のものが含まれていることにも注意してください。仮パラメータと同じ名前 ($price_1 など) で、実パラメータが仮パラメータとは異なる名前 ($liters_1 と $amount_1 が異なるなど) の場合は、次のセクションで説明しますが、問題はありません。どちらのメソッドでも、式の仮パラメータ名は関数の外に完全に独立して存在します。関数自体が呼び出した場合でも同様です。

以上は、PHP 学習ガイド - 第 8 章 (1) の内容です。その他の関連コンテンツについては、PHP 中国語ネットワーク (www.php.cn) にご注意ください。

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