ホームページ >php教程 >php手册 >PHP(3) PHP 関数を段階的に学習します

PHP(3) PHP 関数を段階的に学習します

WBOY
WBOYオリジナル
2016-06-13 12:18:52872ブラウズ

1. メソッドの概要

まず、誰でも確認できる最も単純な関数を作成します。

<span style="COLOR: blue"><</SPAN><SPAN style="COLOR: maroon">html</SPAN><SPAN style="COLOR: blue">>
<</SPAN><SPAN style="COLOR: maroon">head</SPAN><SPAN style="COLOR: blue">>
  <</SPAN><SPAN style="COLOR: maroon">title</SPAN><SPAN style="COLOR: blue">></span>HelloPHP<span style="COLOR: blue"></</SPAN><SPAN style="COLOR: maroon">title</SPAN><SPAN style="COLOR: blue">>
</</SPAN><SPAN style="COLOR: maroon">head</SPAN><SPAN style="COLOR: blue">>
<</SPAN><SPAN style="COLOR: maroon">body</SPAN><SPAN style="COLOR: blue">>
  <?</SPAN><SPAN style="COLOR: maroon">php
    </SPAN><SPAN style="COLOR: red">function CustomPrint</SPAN>($<SPAN style="COLOR: red">str</SPAN>)
    {
      <SPAN style="COLOR: red">for</SPAN>($<SPAN style="COLOR: red">i</SPAN><SPAN style="COLOR: blue">=0;$i</SPAN><5;$<SPAN style="COLOR: red">i</SPAN>++)
      {
        <SPAN style="COLOR: red">echo</SPAN>($<SPAN style="COLOR: red">str</SPAN>);
        <SPAN style="COLOR: red">echo</SPAN>(<SPAN style="COLOR: blue">'<br/>'</span>);
      }
    }
    
    <span style="COLOR: red">CustomPrint</span>(<span style="COLOR: blue">"Hello"</span>);
  <span style="COLOR: blue">?>
</</SPAN><SPAN style="COLOR: maroon">body</SPAN><SPAN style="COLOR: blue">>
</</SPAN><SPAN style="COLOR: maroon">html</SPAN><SPAN style="COLOR: blue">>
</span>

この例を通して、PHP での関数の一般的な記述方法が理解できたと思います。構文に関しては、while、for、if なども同様です。その他の違いについては、今後の記事で徐々に説明します。

それでは、このメソッドの重要なポイントを要約しましょう:

A. PHP メソッドは関数で宣言されます。これは、おなじみの Javascript に似ています。

B. 変数を使用する場合は、ドル記号 ($) で始める必要があります。

2. 参照によるパラメータの受け渡しと値の受け渡し

パラメータ値の受け渡しと参照の受け渡しは、C 言語を学習する際に誰もが触れたことがあると思います。以下は C# を使用した例です。

<span style="COLOR: blue">public void </span>Swap(<span style="COLOR: blue">int </span>a, <span style="COLOR: blue">int </span>b)
{
  <span style="COLOR: blue">int </span>temp = a;
  a = b;
  b = temp;
}
<span style="COLOR: blue">public void </span>Swap(<span style="COLOR: blue">ref int </span>a, <span style="COLOR: blue">ref int </span>b)
{
  <span style="COLOR: blue">int </span>temp = a;
  a = b;
  b = temp;
}

次に、ここに PHP のバージョンを記述します。

  <span style="COLOR: blue"><?</SPAN><SPAN style="COLOR: maroon">php
    </SPAN><SPAN style="COLOR: red">function Swap1</SPAN>($<SPAN style="COLOR: red">a</SPAN>,$<SPAN style="COLOR: red">b</SPAN>)
    {
      $<SPAN style="COLOR: red">temp</SPAN><SPAN style="COLOR: blue">=$a;
      </SPAN>$<SPAN style="COLOR: red">a</SPAN><SPAN style="COLOR: blue">=$b;
      </SPAN>$<SPAN style="COLOR: red">b</SPAN><SPAN style="COLOR: blue">=$temp;
    </SPAN>}
    <SPAN style="COLOR: red">function Swap2</SPAN>(&$<SPAN style="COLOR: red">a</SPAN>,&$<SPAN style="COLOR: red">b</SPAN>)
    {
      $<SPAN style="COLOR: red">temp</SPAN><SPAN style="COLOR: blue">=$a;
      </SPAN>$<SPAN style="COLOR: red">a</SPAN><SPAN style="COLOR: blue">=$b;
      </SPAN>$<SPAN style="COLOR: red">b</SPAN><SPAN style="COLOR: blue">=$temp;
    </SPAN>}
    
    <SPAN style="COLOR: red">function CustomPrint</SPAN>($<SPAN style="COLOR: red">str</SPAN>)
    {
      <SPAN style="COLOR: red">echo</SPAN>($<SPAN style="COLOR: red">str</SPAN>);
      <SPAN style="COLOR: red">echo</SPAN>(<SPAN style="COLOR: blue">"<br/>"</span>);  
    }
    
    $<span style="COLOR: red">a</span><span style="COLOR: blue">=1;
    </span>$<span style="COLOR: red">b</span><span style="COLOR: blue">=2;
    </span><span style="COLOR: red">Swap1</span>($<span style="COLOR: red">a</span>,$<span style="COLOR: red">b</span>);
    <span style="COLOR: red">CustomPrint</span>(<span style="COLOR: blue">"值传递的结果:"</span>);
    <span style="COLOR: red">CustomPrint</span>(<span style="COLOR: blue">'$a='</span>.$<span style="COLOR: red">a</span>);
    <span style="COLOR: red">CustomPrint</span>(<span style="COLOR: blue">'$b='</span>.$<span style="COLOR: red">b</span>);
    $<span style="COLOR: red">a</span><span style="COLOR: blue">=1;
    </span>$<span style="COLOR: red">b</span><span style="COLOR: blue">=2;
    </span><span style="COLOR: red">Swap2</span>($<span style="COLOR: red">a</span>,$<span style="COLOR: red">b</span>);
    <span style="COLOR: red">CustomPrint</span>(<span style="COLOR: blue">"引用传递的结果:"</span>);
    <span style="COLOR: red">CustomPrint</span>(<span style="COLOR: blue">'$a='</span>.$<span style="COLOR: red">a</span>);
    <span style="COLOR: red">CustomPrint</span>(<span style="COLOR: blue">'$b='</span>.$<span style="COLOR: red">b</span>);
  <span style="COLOR: blue">?>
</span>

この例では: 明確にする必要がある 2 つの点があります:

A. 値の受け渡しと参照の受け渡しの違いは、パラメーターの前の「&」です。

B. CustomPrint('$a='.$a); この文では、一重引用符について特別な説明が必要です。二重引用符の唯一の違いは、変数名が解析できるかどうかです。この例は、問題を説明するのに十分です:

  <span style="COLOR: blue"><?</SPAN><SPAN style="COLOR: maroon">php 
    </SPAN>$<SPAN style="COLOR: red">a</SPAN><SPAN style="COLOR: blue">=1;
    </SPAN><SPAN style="COLOR: red">echo</SPAN>(<SPAN style="COLOR: blue">"$a"</SPAN>);
    <SPAN style="COLOR: red">echo</SPAN>(<SPAN style="COLOR: blue">"<br/>"</span>);
    <span style="COLOR: red">echo</span>(<span style="COLOR: blue">'$a'</span>);
  <span style="COLOR: blue">?>
</span>

最後に、値で渡すとき、PHP はそれをコピーして渡す必要があります。このように、大きなオブジェクトや文字列が使用されると、時間がかかるだけでなく、スペースも消費します。このとき、参照渡しをすると、パフォーマンスを消費するコピー操作を回避できます。パフォーマンスの向上に非常に適しています。

3. スコープの問題

C# では変数を使用する前に宣言する必要があるため、スコープやサブスコープという概念が存在しますが、PHP にはそのような概念はありません。

C# コードの一部を見てみましょう:

<span style="COLOR: blue">public class </span><span style="COLOR: #2b91af">Student
</span>{
  <span style="COLOR: blue">private string </span>name;
  <span style="COLOR: blue">public void </span>SayHello()
  {
    <span style="COLOR: #2b91af">HttpContext</span>.Current.Response.Write(<span style="COLOR: #a31515">"Hello,I am " </span>+ name);
  }
}

言い換えると、外部クラスによって宣言された変数にはメソッド内でアクセスできますが、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 SayHello</SPAN>()
    {
      <SPAN style="COLOR: red">if</SPAN>(<SPAN style="COLOR: red">isset</SPAN>($<SPAN style="COLOR: red">name</SPAN>))
      {
        <SPAN style="COLOR: red">echo</SPAN>(<SPAN style="COLOR: blue">"Hello $name"</SPAN>);  
      }
      <SPAN style="COLOR: red">else
      </SPAN>{
        <SPAN style="COLOR: red">echo</SPAN>(<SPAN style="COLOR: blue">'$name is undefined'</SPAN>);
      }
    }
    <SPAN style="COLOR: red">SayHello</SPAN>();
  <SPAN style="COLOR: blue">?>
</span>

変数が定義されているか、空文字列であるかを検出できる関数「isset」を紹介します。

この結果は、関数本体内では外部変数 $name にアクセスできないことを示しています。

ここでもう 1 つ言及したいのは、unset に対応する関数: unset です。この関数は変数の値を削除するために使用されます。

簡単な例を書きます:

<span style="COLOR: red"><?php 
  </SPAN><SPAN style="COLOR: #660000">$name</SPAN>=<SPAN style="COLOR: #008200">"kym"</SPAN>;
  <SPAN style="COLOR: blue">if</SPAN>(<SPAN style="COLOR: blue">isset</SPAN>(<SPAN style="COLOR: #660000">$name</SPAN>))
  {
    <SPAN style="COLOR: blue">echo</SPAN>(<SPAN style="COLOR: #008200">"Yes"</SPAN>);
  }
  <SPAN style="COLOR: blue">else
  </SPAN>{
    <SPAN style="COLOR: blue">echo</SPAN>(<SPAN style="COLOR: #008200">"No"</SPAN>);
  }
  <SPAN style="COLOR: blue">unset</SPAN>(<SPAN style="COLOR: #660000">$name</SPAN>);
  <SPAN style="COLOR: blue">if</SPAN>(<SPAN style="COLOR: blue">isset</SPAN>(<SPAN style="COLOR: #660000">$name</SPAN>))
  {
    <SPAN style="COLOR: blue">echo</SPAN>(<SPAN style="COLOR: #008200">"Yes"</SPAN>);
  }
  <SPAN style="COLOR: blue">else
  </SPAN>{
    <SPAN style="COLOR: blue">echo</SPAN>(<SPAN style="COLOR: #008200">"No"</SPAN>);
  }
<SPAN style="COLOR: red">?></span>

これらについては、後続のガベージ コレクションで詳しく説明します。

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