ホームページ > バックエンド開発 > PHPチュートリアル > PHP を学ぶ (4) PHP 関数をステップバイステップで学ぶ 補足 2_PHP チュートリアル

PHP を学ぶ (4) PHP 関数をステップバイステップで学ぶ 補足 2_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:40:48
オリジナル
862 人が閲覧しました

1. スコープの問題を解決します

前のセクションでは、PHP の関数のスコープについて説明しました。クラスだけでは問題を説明できない場合は、この記事のスコープの例の方がわかりやすいかもしれません。

では、PHP 関数で外部変数にアクセスするにはどうすればよいでしょうか?

PHP にはグローバル スコープと呼ばれる概念があります。つまり、関数を使用しない場合 (将来クラスの概念が登場する予定です)、作成した変数にはページ上のどこからでもアクセスできます。では、関数本体の問題をどのように解決すればよいでしょうか?

グローバルキーワードを使用できます:

  <span style="COLOR: blue"><?</SPAN><SPAN style="COLOR: maroon">php 
    </SPAN>$<SPAN style="COLOR: red">name</SPAN><SPAN style="COLOR: blue">="kym"</SPAN>;
    <SPAN style="COLOR: red">function Test</SPAN>()
    {
      <SPAN style="COLOR: red">global </SPAN>$<SPAN style="COLOR: red">name</SPAN>;
      <SPAN style="COLOR: red">echo</SPAN>($<SPAN style="COLOR: red">name</SPAN>);
    }
    <SPAN style="COLOR: red">Test</SPAN>();
  <SPAN style="COLOR: blue">?>
</span>
ログイン後にコピー

この場合、$name 変数を再作成することなく、グローバル変数 $name への参照を取得するのと同じです。

PHP マニュアルには次のような言葉があります: グローバル変数を使用することは、$GLOBALS 変数に変数への参照を作成することと同じです。次に、このセマンティクスを模倣して、次のようなコードを書くことができます:

  <span style="COLOR: blue"><?</SPAN><SPAN style="COLOR: maroon">php 
    </SPAN>$<SPAN style="COLOR: red">name</SPAN><SPAN style="COLOR: blue">="kym"</SPAN>;
    <SPAN style="COLOR: red">function Test</SPAN>()
    {
      $<SPAN style="COLOR: red">temp</SPAN><SPAN style="COLOR: blue">=&$GLOBALS["</SPAN><SPAN style="COLOR: red">name</SPAN><SPAN style="COLOR: blue">"];
      echo($temp);
    }
    Test();
  ?>
</span>
ログイン後にコピー

実際、これら 2 つは同等のコードです。このように変数を使用するのは面倒に思えますが、実際にはこれにより多くの副作用が回避されます。たとえば、Java と C# はオブジェクト指向言語ですが、PHP ではすべてが 1 つのページ、または複数のページに収まります。この方法を使用すると、関数の副作用 (偶発的な変更) が発生しやすくなります。

2. デフォルトパラメータ

この概念を初めて聞いたのはおそらく C++ でした。C# を学んだ後は、この概念に触れたことはありませんでしたが、今でもこの機能がとても気に入っています。

これにより、関数に対して面倒なオーバーロードされた関数を大量に記述する必要がなくなります。

最も単純な例を書いてください:

  <span style="COLOR: blue"><?</SPAN><SPAN style="COLOR: maroon">php 
    </SPAN><SPAN style="COLOR: red">function Test</SPAN>($<SPAN style="COLOR: red">name</SPAN><SPAN style="COLOR: blue">="kym"</SPAN>)
    {
      <SPAN style="COLOR: red">echo</SPAN>($<SPAN style="COLOR: red">name</SPAN>);
    }
    <SPAN style="COLOR: red">Test</SPAN>();
    <SPAN style="COLOR: red">Test</SPAN>(<SPAN style="COLOR: blue">"others"</SPAN>);
  <SPAN style="COLOR: blue">?>
</span>
ログイン後にコピー

オーバーロードされた関数を記述する必要はもうありませんか?

ただし、ここで注意すべきことが 2 つあります:

A. パラメータのデフォルト値を設定する場合、最も単純な定数のみを設定でき、複雑な式を含めることはできません。

B. デフォルト値が必要なパラメータは最後に配置する必要があります。これは、C# の変数パラメーターに似ています。

3. 可変パラメータ

C# には、変数パラメーターと呼ばれる概念があります。簡単な例を書いてみましょう:

<span style="COLOR: blue">protected void </span>LinkButton1_Click(<span style="COLOR: blue">object </span>sender, <span style="COLOR: #2b91af">EventArgs </span>e)
{
  Response.Write(GetSum(1, 2, 3, 4, 5));
}
<span style="COLOR: blue">public int </span>GetSum(<span style="COLOR: blue">params int</span>[] elements)
{
  <span style="COLOR: blue">int </span>sum = 0;
  <span style="COLOR: blue">for </span>(<span style="COLOR: blue">int </span>i = 0; i < elements.Length; i++)
  {
    sum += elements[i];
  }
  <SPAN style="COLOR: blue">return </SPAN>sum;
}
ログイン後にコピー

例を書く前に、まず変数パラメーターに関連する 3 つの関数を紹介します。

func_get_args() は関数のすべてのパラメータの配列を返します

func_get_arg() はパラメータから特定の引数を返します

func_num_args() はパラメータの数を返します。

それでは、C# バージョンに対応する PHP バージョンを書きましょう。

りー

4. 変数関数

なぜこの名前に変換する必要があるのか​​わかりません。実際には変数の名前に基づいて対応する関数を呼び出します。

以下に示すように、

は JS のこの eval に非常によく似ています:

  <SPAN style="COLOR: blue"><?</SPAN><SPAN style="COLOR: maroon">php 
    </SPAN><SPAN style="COLOR: red">function GetSum</SPAN>()
    {
      <SPAN style="COLOR: red">if</SPAN>(<SPAN style="COLOR: red">func_num_args</SPAN>()<SPAN style="COLOR: blue">=</SPAN>=0)
      {
        <SPAN style="COLOR: red">return </SPAN>0;
      }
      $<SPAN style="COLOR: red">sum</SPAN><SPAN style="COLOR: blue">=0;
      </SPAN><SPAN style="COLOR: red">for</SPAN>($<SPAN style="COLOR: red">i</SPAN><SPAN style="COLOR: blue">=0;$i<</SPAN><SPAN style="COLOR: maroon">func_num_args</SPAN>();$<SPAN style="COLOR: red">i</SPAN>++)
      {
        $<SPAN style="COLOR: red">sum</SPAN>+<SPAN style="COLOR: blue">=func_get_arg($i);
      </SPAN>}
      <SPAN style="COLOR: red">return </SPAN>$<SPAN style="COLOR: red">sum</SPAN>;  
    }
    <SPAN style="COLOR: red">echo</SPAN>(<SPAN style="COLOR: red">GetSum</SPAN>(1,2,3,4));
  ?<SPAN style="COLOR: blue">>
ログイン後にコピー

これは、関数名を渡して、対応する関数を実行します。 PHP でも、実際には同じであり、より単純です。

りー

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/321306.html技術記事 1. スコープの問題を解決する 前のセクションでは、PHP の関数のスコープの問題について説明しました。クラスだけでは問題を説明できない場合は、この記事のスコープの例の方が説得力があるかもしれません...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート