3.関数を使ってみよう

今回は、関数について解説していきます。

関数とは

関数とは、あらかじめ定義しておいた処理を呼び出せる仕組みです。

前回紹介したvar_dumpのように、PHP自体に最初から組み込まれている関数を呼び出すこともできますし、自分で作成することもできます(ユーザー定義関数)。

関数の定義と使い方

それでは、自分で定義した関数を使ってみましょう。

sample/index.php
<?php

function hello() {
    $msg = 'Hello, world!';

    echo $msg;
}

hello(); // Hello, world! が出力される

helloという関数を定義して、最後にその関数を実行してみました。

関数はfunctionの後にスペースを開けて、任意の関数名と()を書き、中括弧({})の中は実行する処理を書きます。

関数名()の形で定義した関数を実行できます。

sample/index.php
<?php

function hello() {
    $msg = 'Hello, world!';

    echo $msg;
}

hello();
hello();
hello();

このように、何度も関数を呼び出すことができるるので、2回以上使う処理は関数にしておくと便利です。

戻り値

次に、index.phpを以下のように書き換えてみましょう。

sample/index.php
<?php

function hello() {
    return 'Hello, world!';
}

$msg = hello();
echo $msg; // Hello, world!

return文を書くと、関数の実行結果として値が返されます。これを戻り値といいます。

上記のコードでは、hello関数を実行すると、'Hello, world!'が返され、$msg変数に代入されます。

また、returnは処理を中止するので、returnより下にある処理は実行されません。

sample/index.php
<?php

function hello() {
    return 'Hello, world!';

    var_dump('foo'); // 実行されない
}
hello();

この例では、var_dump(‘foo’);は実行されないので、ブラウザにvar_dumpの結果は出力されません。

引数

次に、以下のようにコードを書き換えてみてください。

sample/index.php
<?php

function sum($num1, $num2) {
    return $num1 + $num2;
}

$result = sum(1, 2);

var_dump($result); // 3が出力される

関数の括弧内に、値を2つ入れられるようにしました。この値を引数と言います。

sum関数は、2つの引数を足して返す処理を行っています。

1と2を入れて関数を実行すると、3が返されて$resultに代入されます。

引数にはデフォルト値を設定することもできます。

sample/index.php
<?php

function sum($num1, $num2 = 5) {
    return $num1 + $num2;
}

$result = sum(1, 4);

var_dump($result); // 5が出力される

$result = sum(1);

var_dump($result); // 6が出力される

引数は2つ入れられるようになっていますが、1つしか入っていない場合は第二引数には5が入り、6が返されます。

デフォルト値がある引数は後に書く決まりがあります。

スコープ

次に、index.phpを以下のように書き換えてみてください。

sample/index.php
<?php

function hello() {
    $msg = 'Hello, world!';

    echo $msg;
}

hello();

var_dump($msg); // 未定義エラー

関数の中で定義された変数は、その外からアクセスすることができません。

上記のコードでは、$msg変数は関数の中で定義されており、関数外にあるvar_dumpで使用するとエラーが発生します。

以下のようなコードもエラーになります。

sample/index.php
<?php

$msg = 'Hello, world!';

function hello() {

    echo $msg;
}

hello(); // 未定義エラー

このように、関数の外で定義された変数は、変数の中からアクセスできません。

変数には、アクセスできる範囲が決まっており、その範囲をスコープと言います。

コードが長くなると、変数名が被ることがあります。簡単に変数にアクセスできてしまうと、意図せず変数が書き換わってしまい、バグが発生する可能性が高くなります。

変数の宣言を関数の中で行うことで、意図しない変数の書き換えを防ぐことができます。

sample/index.php
<?php

function hello() {

    $msg = 'Hello, world!<br>';

    echo $msg;
}

function konnichiwa() {

    $msg = 'こんにちは!<br>';

    echo $msg;
}

konnichiwa();
hello();

hello関数とkonnichiwa関数では同じ変数名を定義していますが、スコープは関数の中になるので、互いに影響を与えません。

まとめ

  • 関数は処理を定義して何度でも使いまわせる
  • 関数の中で定義した変数は外からアクセスできない(スコープ)