【PHP】メソッドの書き方と使い方の基本
本記事では、PHPのメソッド(関数)について、その役割や基本的な書き方を解説します。引数や戻り値の扱いや、引数のデフォルト値、可変長引数、PHP 8.0以降のキーワード引数まで、具体的なコード例を通して習得できます。コードの再利用性を高め、効率的な開発を目指しましょう。
開発環境
- OS: Windows10
- Editor: Visual Studio Code
- PHP: 8.0以降
PHPのメソッドとは
PHPメソッドの基本です。
メソッドとは、特定の処理をまとめた関数のことです。これは、プログラムの中で「この処理をしたい」という一連の手順を、一つのまとまりとして定義するものです。例えることはできませんが、プログラムのある目的を達成するための手順書のようなものと考えてください。
共通した処理をまとめ、何度も再利用可能なコードの断片です。プログラム開発では、同じような処理を何度も行う場面が多くあります。メソッドとして一度定義しておけば、その処理が必要になったときに、そのメソッドを呼び出すだけで簡単に実行できます。これにより、同じコードを何度も書く手間が省け、コードの見通しも良くなります。また、もしその処理の内容を変更する必要が生じても、メソッドの中身を一度修正するだけで、そのメソッドを呼び出しているすべての場所に変更が適用されるため、効率的に開発を進めることができます。
メソッドには、外部から値を受け取ったり、処理の結果を返したりする機能があります。
引数:関数に渡す値のことです。メソッドを実行する際に、そのメソッドに何らかの情報やデータを渡したい場合に「引数」を使います。引数として渡された値を使って、メソッドはその内部で処理を行います。
戻り値:関数を実行した結果を返す値のことです。メソッドが特定の処理を実行した後、その結果を呼び出し元に伝えたい場合に「戻り値」を使います。例えば、計算を行うメソッドであれば、その計算結果を戻り値として返すことで、その結果を呼び出し元のプログラムで利用できます。
サンプルコード
php/chapter13/01.php
このコードは、最も基本的なメソッドの定義と呼び出し方を示しています。
function greet():functionキーワードを使ってgreetという名前のメソッドを定義しています。丸括弧()の中に何も書かれていないため、このメソッドは引数(メソッドに渡す情報)を受け取りません。{ echo "Hello!"; }: 波括弧{}の中に、メソッドが実行する処理内容を書きます。ここでは "Hello!" という文字列を出力する処理です。greet();: 定義したメソッドを実際に実行するには、メソッド名の後に丸括弧()を付けて呼び出します。このコードを実行すると、「Hello!」と表示されます。- このメソッドは、呼び出されると直接画面にメッセージを出力するため、特に何か値を「返す」ことはありません。このようなメソッドを「引数も戻り値もないメソッド」と呼びます。
01.php1<?php 2// メソッドの書き方: 3// function メソッド名(引数1, 引数2, ...) { 4// // 処理内容 5// return 戻り値; 6// } 7// 基本的なメソッドの例 8// 引数と戻り値がないメソッド 9function greet() { 10 echo "Hello!"; 11} 12 13greet(); // 出力: Hello! 14
php/chapter13/02.php
このコードも greet メソッドを定義していますが、01.php とは異なり、return キーワードが使われています。
return "Hello!";:returnは、メソッドの処理を終了し、指定した値をメソッドの呼び出し元に「返す」ためのキーワードです。ここでは "Hello!" という文字列を返しています。echo greet();:greet()メソッドを呼び出すと、"Hello!" という文字列が返されます。その返された文字列をechoで画面に出力しています。01.phpとの主な違いは、処理内容を直接出力するか、それとも処理結果を返して、呼び出し元で利用するかという点です。値を返すことで、その値を別の変数に代入したり、別の処理で利用したりと、より柔軟に扱えるようになります。
02.php1<?php 2// 引数を使用しないメソッド 3function greet() { 4 return "Hello!"; 5} 6 7echo greet(); // 出力: Hello! 8
php/chapter13/03.php
このコードでは、メソッドに「引数」を渡す方法を学べます。引数を使うと、メソッドの処理内容を変えることなく、外から異なる情報を与えることができます。
function greet($name): 丸括弧()の中に$nameという変数を定義しています。これが引数です。このメソッドは、$nameという名前で値を受け取ります。return "Hello, $name!";: メソッド内で受け取った$name変数を使って、メッセージを生成しています。echo greet("Alice");:greetメソッドを呼び出す際に、丸括弧()の中に"Alice"という文字列を渡しています。この"Alice"が$name引数に代入され、メソッド内で利用されます。- 実行結果は「Hello, Alice!」となります。引数を使うことで、メソッドの処理を汎用的にし、さまざまな状況で再利用できるようになります。
03.php1<?php 2// 引数を使用するメソッド 3function greet($name) { 4 return "Hello, $name!"; 5} 6 7echo greet("Alice"); // 出力: Hello, Alice! 8
php/chapter13/04.php
03.php では引数が一つでしたが、このコードでは複数の引数をメソッドに渡す方法を示しています。
function greet($greeting, $name): 複数の引数を定義する場合は、丸括弧()の中で引数名をカンマ,で区切って指定します。ここでは$greetingと$nameの二つの引数を受け取ります。return "$greeting, $name!";: メソッド内で、受け取った二つの引数を組み合わせてメッセージを生成しています。echo greet("Good morning", "Alice");: メソッドを呼び出す際にも、引数の数と順番に合わせて値を渡します。最初の"Good morning"が$greetingに、次の"Alice"が$nameにそれぞれ代入されます。- 実行結果は「Good morning, Alice!」となります。引数を複数使うことで、メソッドの処理をより複雑な要件に対応させることができます。引数を渡す順番が重要なので注意しましょう。
04.php1<?php 2// 複数の引数を使用するメソッド 3function greet($greeting, $name) { 4 return "$greeting, $name!"; 5} 6 7echo greet("Good morning", "Alice"); // 出力: Good morning, Alice! 8
php/chapter13/05.php
このコードでは、引数に「デフォルト値」を設定する方法を学べます。デフォルト値を設定すると、その引数を省略してメソッドを呼び出すことができるようになります。
function greet($name = "Guest"): 引数$nameの定義の際に= "Guest"と記述することで、「もし$nameに値が渡されなかったら、自動的に"Guest"を使う」というデフォルト値を設定しています。echo greet();: この行では、greetメソッドを呼び出す際に引数を何も渡していません。この場合、$nameにはデフォルト値の"Guest"が使われるため、出力は「Hello, Guest!」となります。echo greet("Bob");: この行では、"Bob"という引数を渡しています。デフォルト値が設定されていても、明示的に引数を渡せば、その値が優先して使われます。そのため、出力は「Hello, Bob!」となります。- デフォルト値は、引数の一部が常に同じ値になることが多い場合や、引数の省略を許可したい場合に便利です。
05.php1<?php 2// 引数にデフォルト値を設定するメソッド 3function greet($name = "Guest") { 4 return "Hello, $name!"; 5} 6 7echo greet(); // 出力: Hello, Guest! 8echo greet("Bob"); // 出力: Hello, Bob! 9
php/chapter13/06.php
このコードは、PHP 8.0以降で利用できる「キーワード引数」という便利な機能を紹介しています。キーワード引数を使うと、メソッド呼び出し時に引数の名前を指定して値を渡せるようになります。
function greet($greetng, $name): メソッドの定義自体は、04.phpのように複数の引数を持つ通常のメソッドと同じです。echo greet(name: "Alice", greetng: "Good evening");: メソッドを呼び出す際に、引数名: 値の形式で引数を渡しています。name: "Alice"は、$name引数に"Alice"を渡すことを意味します。greetng: "Good evening"は、$greetng引数に"Good evening"を渡すことを意味します。
- 重要な点: 通常の引数渡しでは引数の順番が重要でしたが、キーワード引数を使うと、引数を渡す順番を気にしなくてよくなります。例えば、この例ではメソッド定義での
$greetng、$nameの順序と、呼び出し時のname:,greetng:の順序が逆になっていますが、正しく動作します。 - 実行結果は「Good evening, Alice!」となります。引数が多いメソッドで、どの引数が何を意味するのかを明確にしたい場合や、一部の引数だけを渡したい場合に非常に役立ちます。ただし、PHP 8.0未満のバージョンではこの機能は利用できませんので注意が必要です。
06.php1<?php 2// キーワード引数を使用するメソッド (PHP 8.0以降) 3function greet($greetng, $name) { 4 return "$greetng, $name!"; 5} 6 7echo greet(name: "Alice", greetng: "Good evening"); // 出力: Good evening, Alice! 8
php/chapter13/07.php
このコードでは、「可変長引数」を持つメソッドの書き方を示しています。可変長引数とは、メソッドに渡される引数の数が決まっていない場合に便利な機能です。
function sum(...$numbers): 引数名の前に...(三点リーダー) を付けることで、このメソッドが複数の引数を受け取れるようになります。渡されたすべての引数は、$numbersという名前の「配列」としてメソッド内で扱われます。$total = 0;: 合計値を格納するための変数を初期化しています。foreach ($numbers as $num):$numbers配列の各要素(つまり、渡された個々の数値)を順番に$numに取り出し、処理を繰り返します。$total += $num;:$totalに$numの値を足し合わせています。return $total;: 計算された合計値を返します。echo "Sum: " . sum(1, 2, 3, 4, 5) . "\n";:sumメソッドを呼び出す際に、複数の数値をカンマで区切って渡しています。これらの数値1, 2, 3, 4, 5が$numbers配列としてメソッドに渡され、合計が計算されます。- 実行結果は「Sum: 15」となります。引数の数が事前にわからない場合や、柔軟に複数の値を受け取りたい場合に、可変長引数は非常に役立ちます。
07.php1<?php 2// 可変長引数を持つメソッド 3function sum(...$numbers) { 4 $total = 0; 5 foreach ($numbers as $num) { 6 $total += $num; // 配列の要素を順番に足し合わせる 7 } 8 return $total; 9} 10 11echo "Sum: " . sum(1, 2, 3, 4, 5) . "\n"; // 出力: Sum: 15 12
php/chapter13/08.php
ここからは、これまでの知識を応用した練習問題の解答例です。この 08.php と次の 09.php、10.php で、円の面積を計算するメソッドを完成させ、利用する手順を見ていきます。
function calculateCircleArea($radius, $pi = 3.14):calculateCircleAreaという名前でメソッドを定義しています。- 引数として
$radius(半径) を受け取ります。これは円の面積計算に必須の値です。 - もう一つの引数として
$pi(円周率) を定義し、デフォルト値として3.14を設定しています。これにより、特別な円周率を使いたい場合以外は$piの指定を省略できます。
$area = $radius * $radius * $pi;: 円の面積の公式「半径 × 半径 × 円周率」を使って面積を計算し、$area変数に代入しています。
08.php1<?php 2// 円の面積を求める関数を定義する練習問題。なお、円周率は3.14とする。 3// 円の面積を求める関数を定義 4function calculateCircleArea($radius, $pi = 3.14) { 5 // 面積を計算 (面積 = 半径 × 半径 × 円周率) 6 $area = $radius * $radius * $pi; 7
php/chapter13/09.php
08.php の続きで、calculateCircleArea メソッドの定義を完了させています。
return $area;:08.phpで計算した$areaの値をメソッドの呼び出し元に返しています。これにより、このメソッドが計算結果を外部に渡せるようになります。- 波括弧
}でメソッドの定義が閉じられ、calculateCircleAreaメソッドが完成しました。
09.php1<?php 2 // 計算した面積を返す 3 return $area; 4} 5
php/chapter13/10.php
08.php と 09.php で定義した calculateCircleArea メソッドを実際に利用するコードです。
$radius = 5;: 半径を5とした変数を定義しています。echo calculateCircleArea($radius);:calculateCircleAreaメソッドを呼び出し、引数として$radius(値は5) を渡しています。- メソッドは半径
5とデフォルトの円周率3.14を使って面積を計算し、その結果を返します。 echoは、メソッドから返された面積の値(5 * 5 * 3.14 = 78.5)を画面に出力します。
- このコードを実行すると、「78.5」と表示されます。このように、メソッドを使うことで、特定の計算処理をまとめて、必要な場所で簡単に呼び出せるようになります。
10.php1<?php 2// 半径が5の円の面積を求める 3$radius = 5; 4echo calculateCircleArea($radius); 5
おわりに
本記事では、特定の処理をひとまとめにするPHPの「メソッド」について、その基本的な役割と書き方を習得しました。引数や戻り値の基本的な使い方から、引数のデフォルト値、複数の引数の扱い方を具体的なコードを通して理解できたことと思います。また、PHP 8.0以降のキーワード引数や、引数の数が不定な場合に便利な可変長引数といった応用的な機能も学びました。これらのメソッドを効果的に活用することで、コードの再利用性が高まり、効率的で保守しやすいプログラム開発につながります。ぜひご自身のプロジェクトでメソッドを活用し、より良いコードを書くための土台を築いてください。