未経験からエンジニア転職をするための最強ロードマップロードマップ

【PHP教材④】関数から引数、戻り値の使い方、外部ファイルの関数を呼び出す方法までを徹底解説

ファド

こんにちは!
PHPのLaravelやJavaScriptでWeb開発をしているフリラーンスエンジニアのファドと申します!

こちらの記事はPHP教材の第4回目の記事になります。

その他のPHP教材を学習したい方は下記リンクから直接教材へ飛ぶことができます。

目次

関数について

フォルダ名:「function」

今回のレクチャーでは、関数という概念について説明し、実際に使っていきたいと思います。
まず、関数を一言で説明すると「複数の処理を1つにまとめて名前を付けたもの」となります。

プログラミングしていると、同じような処理を複数回必要とする場合がでてきます。
このようなタイミングで、処理を予めひとまとめにしておいて、何度も呼び出す形で利用することができれば、コード全体の「構造化」と「効率化」を向上させることが可能になるのです。

実は、PHPで最初から用意されている関数も存在しています。
今まで使用していたvar_dump()も関数です。
このように、PHPで最初から用意されている関数は、「組み込み関数」や「ビルトイン関数」などと呼ばれています。

一方で、自分で作り出す関数のことは、「ユーザー定義関数」などと呼ばれています。
本レクチャーでは、この「ユーザー定義関数」について学習していきます。

関数の作り方は以下の通りです。

<?php
function 関数名()
{
    // 処理
}

まず、関数の宣言としてfunctionと記述します。
そして、関数の名前をその後に記述します。
今回の例では、関数名をsampleとしています。

しかし、関数は「宣言」をしただけではコードが実行されることはありません。
関数は、宣言したあとに呼び出すことではじめて利用することができるようになります。
ここでは「呼び出す」という表現を使っていますが、簡単に言えば「作成した関数を実行する」という意味です。

まだ何を言っているか掴めないと思うので、手を動かしながら覚えていきましょう。

まずindex.phpを下記の通り編集してください。

<?php
function sample()
{
    echo '何も処理はされません';
}

それでは、ファイルをブラウザで確認してください。
ブラウザには何も出力されていないと思います。

これはなぜかと言うと、「関数を実行していないから」です。

関数を実行したいときは「関数の呼び出し」を行う必要があります。

呼び出しはとても簡単で、以下のように行うことができます。

<?php
関数名();

関数名だけでなく()も忘れずに入れてくださいね。
この部分はJavaScriptと同じく引数を記述する部分ですが、PHPの「引数」に関しては、他レクチャーで説明させていただきます。

それでは、先程の関数sampleを呼び出してみましょう!
index.phpを下記の通り編集してください。

<?php
function sample()
{
    echo 'これはブラウザにに出力されます';
}

sample();

それでは、ファイルをブラウザで確認してください。
無事にこれはブラウザにに出力されますという文字列がブラウザに出力されていると思います。

ちなみに、関数は使い回すことができるので、好きな場所で何回でも呼び出すことができます。

<?php
function sample()
{
    echo '処理を10回呼び出すよ!';
}

sample();
sample();
sample();
sample();
sample();
sample();
sample();
sample();
sample();
sample();

// for文を使って書くこともできます。
for ($i = 0; $i < 10; $i++) {
    sample();
}

戻り値について

関数には、もう一つ大事な概念があります。
それが、戻り値(返り値)です。

関数では、return文に値を記述することで、関数の呼び出し元へ値を返すことができます。
何を言っているのかわからないと思うので、まずは、書き方と実際の動きを見てみましょう。

戻り値は下記のコードで実装することができます。

<?php
function 関数名()
{
    // 処理
    return 戻り値;
}

関数の処理の中に、なんだかよくわからないreturn 戻り値;が追加されています。
これを実際のコードで見てみましょう。

index.phpを下記の通り編集してください。

<?php
function sample()
{
    $first = 'これは';
    $second = 'テスト';

    $result = $first . $second;
    echo $result;
}

echo sample();

ファイルをブラウザで確認してください。
echoを2箇所で使用したにもかかわらず、これはテストという文字列が1つしか出力されていません。

これはどういうことなのでしょうか?

まず、関数sampleは呼び出されるまでは実行されないので、読み飛ばしてください。
ようやく一番下の行でecho sample();とあるので、sample関数の結果をブラウザに出力してくださいという命令があるので、関数sampleを実行します。

関数sampleの中身は、これはテストという文字列を各変数に代入しています。
その代入した変数を文字列連結し、変数resultに格納しています。

そして、関数sampleの最後の行でecho result;としてあるので、ブラウザで最初に出力されたこれはテストの文字列はこの記述で出力されています。

関数sampleは最後の行まで処理を実行したので、echo sample();というコードに戻ります。
ここで疑問が生まれます。
関数sampleは結局何なのかということです。

もちろんPHPも関数sampleが何なのかわからないので、ブラウザ上には何も出力されません。

この問題を解決するのがreturn文です。

index.phpを下記の通り編集してください。

<?php
function sample()
{
    $first = 'これは';
    $second = 'テスト';

    $result = $first . $second;
    echo $result;
    return $result;
}

echo sample();

ファイルをブラウザで確認してください。
無事にこれはテストという文字列が2回出力されていれば、OKです。

つまり、関数sampleが実行されると、これはテストという文字列を返す関数だということになります。

return文の注意点として、returnを書いた後の処理は実行されることはありません。

index.phpを下記の通り編集してください。

<?php
function sample()
{
    $first = 'これは';
    $second = 'テスト';

    return $first;

    $result = $first . $second;
    echo $result;
}

echo sample();

ファイルをブラウザで確認してください。
ブラウザにはこれはという文字列しか出力されていませんね。
また、echo $result;も実行されていないので、これはテストという文字列もブラウザには出力されません。

つまり、return文を使用すると、処理をその時点で終了させることもできます。

index.phpを下記の通り編集してください。

<?php
function sample()
{
    $first = 'これは';
    $second = 'テスト';

    return;

    $result = $first . $second;
    echo $result;
}

echo sample();

ファイルをブラウザで確認してください。
ブラウザ上には何も出力されていませんね。

return文はreturn単体でも使うことができます。
その場合は戻り値を返さずに処理が終わることになります。

そのため、関数sampleを実行しても何も返ってこないので、echo sample()としても何も表示されません。

このreturnはif文などと一緒に使われることも多いです。

<?php
function ticketFee()
{
    $old = 10;

    if ($old < 20) {
        echo '20才未満は利用できません';
        return;
    }

    if ($old > 30) {
        echo '利用料は 2,000円です';
    } else {
        echo '利用料は 1,800円です';
    }
}

ticketFee();

変数oldが20未満の場合はブラウザに20才未満は利用できませんと出力し、return文を実行します。
もし、変数oldが30より大きかった場合は、利用料は 2,000円ですが出力されます。
また、変数oldが20以上で30以下だった場合は、利用料は 1,800円ですが出力されます。

今回は変数oldが10なので、ブラウザには20才未満は利用できませんと出力され、return文が実行さるので、それ以降の処理は実行されません。

皆さんで変数oldの中身を変えてみると、違う結果が得られますので、興味がある方はぜひ試してみてください。

★検索ワード
・PHP 関数 使い方
・PHP 戻り値とは
・PHP return 使い方

インデントとは

JavaScriptの教材でも説明しましたが、インデントとは、文章の行頭に空白を挿入して、先頭の文字を右に押しやることです。
もちろんPHPでもインデントがあります。

<?php
$indent = 'これはインデントの例';
if ($indent === 'これはインデントの例') {
    echo 'true' . '<br>';
}

for ($i = 0; $i < 5; $i++) {
    echo $i . '<br>';
}

function test()
{
    echo 'test';
}

test();

if ()for()の前にはスペースが2つあり、echo true;echo $i;echo 'test'の前にスペースが4つありますよね?これがPHPのインデントです。

★検索ワード
・PHP インデント

引数について

フォルダ名:「parameter」

前レクチャーでは「関数」について学習しましたが、関数を定義する時に関数名()としていたことを覚えていますか?
実は、この()の中には、値を入れることができます。
この()の中に入れた値のことを「引数」といいます。

まずは手を動かしてみましょう。

index.phpを下記の通り編集してください。

<?php
function sample($text)
{
    echo $text;
}

sample('これが引数だよ');

ファイルをブラウザで確認してください。
ブラウザにこれが引数だよが出力されていれば、OKです

それでは、引数を説明するためのコードが揃ったので確認していきましょう。

まず、関数sampleは呼び出されるまで実行されないので、そのまま呼び飛ばしてしまいます。

sample('これが引数だよ');と記述してある部分で、ようやく関数sampleを呼び出しています。
また、関数sampleにはこれが引数だよという引数が設定されているので、関数sampleにその文字列を渡してあげることになります。

関数sampleでは、これが引数だよという文字列を引数textとして受け取ります。
引数として受けったので、これ以後関数sampleの中で$textとすることで、これが引数だよという文字列を取得することができるようになりました。

echo $text;とすることで、引数textをブラウザに出力する処理が記述されています。
そのため、ブラウザを確認すると、これが引数だよという文字列が出力されていたのでした。

引数は変数のような扱い方をしますが、宣言する必要はありませんので、そこは注意してください。

より実践的な使い方をしていきましょう。

index.phpを下記の通り編集してください。

<?php
function sample($param)
{
    echo $param . '<br>';
}

function test($start, $text, $fin)
{
    return $start . $text . $fin . '!';
}

$start = 'これは';
$text = 'テキスト';
$fin = 'です';
$word = 'こんにちは';
$num = 10;

sample('これが引数だよ');
sample($word);
sample($num);
sample(test($start, $text, $fin));

ファイルをブラウザで確認し、下記画像のように表示されていれば、OKです!

上記の例のように、引数には変数を渡すこともできます。
また、引数は、渡す方の名前と受け取る方の名前が同じでも異なっていても受け取ることができます。
そして、引数は何個でも渡すことができます。

★検索ワード
・PHP 引数 使い方
・PHP 引数 複数

外部ファイルの関数呼び出し

フォルダ名:「require」

今回は外部ファイルに定義した関数を呼び出し使用する方法について解説していきます!
世の中に出回っているほとんどすべてのwebアプリケーションは、数十、数百というファイルから構成されています。
すべてのファイルで共通する処理があった場合にすべてのファイルに同じ関数を定義するのはすごく手間です。
そこで、便利な機能として、あるファイルの中で一度定義した関数を別のファイルで使うことが可能です。
早速やってみましょう!

まずは、関数を定義するだけのファイルとして、function.phpを作成し下記の通り編集してください。

<?php
function sample($data)
{
    if ($data == 1) {
        return "a";
    } else if ($data == 2) {
        return "b";
    } else {
        return "c";
    }
}

function.phpをブラウザで確認してください。
ブラウザには何も表示されていませんね。

それもそのはずで、ファイル内に1度もechovar_dump()のようなブラウザ出力のための記述がされていないからです。

しかし、ここまでで、関数を外部ファイル化することに成功しました。
外部ファイル化とは別のファイルに関数を記述することです。

次は、外部ファイルに記述した関数を使う(呼び出す)プログラムを学んでいきましょう。

index.phpを作成し下記の通り編集してください。

<?php
$a = 2;
$b = 1;
$c = $a - $b;

echo sample($a);
echo "<br>"; //改行

echo sample($b);

echo "<br>"; //改行

echo sample($c);

index.phpをブラウザで確認してください。
エラーになってしまいましたね。

index.phpではsampleという関数が定義されていないため、エラーとなります。
そこで、function.phpに定義したsaple関数を使えるようにしたいと思います。

require “利用したい外部ファイル名.php”;

とファイルに記述することで外部のファイルを呼び出し、対象のファイルの情報を読み込むことができます。

requireが要求する、という英単語なのでそのままの意味ですね。
index.phpを下記の通り編集してください。

<?php
require "function.php"; //function.phpのプログラムを読み込むよ

$a = 2;
$b = 1;
$c = $a - $b;

echo sample($a);
echo "<br>";

echo sample($b);

echo "<br>";

echo sample($c);

では、index.phpをブラウザで確認してください。

今度はエラーにならずに結果が表示出来ましたね!

index.phpにはsampleという関数が定義されていませんが、requireでfunction.phpの情報を読み込む事によって、function.phpに定義したsampleという関数をindex.phpで使用することができるようになりました。

最後に、なぜ関数を外部ファイル化するのか?という原点に戻ると「1度作成した関数を他のファイルでも使いたい!」と思ったときに、その関数をその都度コピペして、すべてのファイルに記述するのは非効率です。
例:プログラムの行数が長くなる(メンテナンスがしにくくなる)

そこで、関数を外部ファイル化して、requireを書き、呼び出し可能にしておけば、プログラムの行数を増やさなくてもやりたいことが実現できます。

このように、同じプログラムを何度も書かないということがプログラマーとしての仕事の効率を上げていくことにつながります。
ぜひ、マスターしましょう!

次の教材

次の教材は下記から簡単に飛ぶことができます!
引き続きプログラミングを楽しんでいきましょう!

あわせて読みたい
【PHP教材⑤】クラスやインスタンスの使い方からフォームからデータを受け取る方法、メールの送信処理ま... こちらの記事はPHP教材の第5回目の記事になります。 その他のPHP教材を学習したい方は下記リンクから直接教材へ飛ぶことができます。 クラスとインスタンスについて フ...

プログラミング学習サポートについて

「独学で挫折した。。。」

「一人でのプログラミング学習がしんどい。。。」

「未経験からエンジニア転職をしたいけど何をしたら良いかわからない。。。」

このような悩みをお持ちの方向けに、本教材作成者のファドがMENTAという学習サイトにてあなたのプログラミング学習とエンジニア転職を徹底サポートいたします!

サポート価格はなんと1日あたりたったの約300円!

教材で分からない箇所のサポートはもちろんのこと、本サイトで公開しているすべての課題の解答も公開しております。
また、MENTAで学習を終わらせていただいた方限定で懇意にしていただいている企業さんを紹介することもあります!

なお、サポート内容の詳細は下記の通りです。

  • 目標設定
  • マインドセット
  • オリジナル教材見放題
  • オリジナル課題見放題
  • オリジナル課題の解答見放題
  • 課題コードレビュー
  • 教材への無制限質問
  • 課題への無制限質問
  • ポートフォリオ作成アドバイス
  • 褒めのコーチング

いくつかのプランを用意させていただいておりますので、下記より一度ご覧ください!

あわせて読みたい
【プログラミング学習】1日あたりたったの「300円」のみでプログラミングを学び、最短で転職or稼ぐ!|【ME... プログラミングを学びたいすべての方へこれからの時代は格安でプログラミングを学び、最短で稼げ自己紹介はじめまして!この度はプランをご覧いただき、誠にありがとうござ...

コメント

    この記事が気に入ったら
    フォローしてね!

    よかったらシェアしてね!
    • URLをコピーしました!

    コメント

    コメントする

    目次