【独学】はじめてのWebプログラミング – 5.5 PHPの基礎⑤

関数

関数とは処理をグループ化したものです。
大量のコードを書く場合、同じような処理内容をいたるところで書くことがあります。このようなときに、同じような処理内容をグループ化(=共通化)しておくことで、その処理を使いたいところではそのグループを呼び出すだけでよくなります。

例えば、以下のように書きます。

htdocs/PHP/test.php

<?php

// ①関数を宣言
function echoHelloWorld(){
    // この中に処理内容(=処理内容をグループ化したもの)を書く
    echo 'Hello, World';  // ③関数の内容が実行される
}

// ②関数を呼び出す
echoHelloWorld();

// ④次の処理に進む
echo '<br>';
echo 'finished';

?>
ブラウザ

関数は「function 関数名(){ 処理内容 }」のように書きます。これは覚えるしかありません。関数名は任意に付けることができますが、「動詞+目的語」で書くようにして下さい。ここでは、「echoHelloWorld」すなわち「HelloWorldと出力する」関数という意味にしています。先頭の文字は小文字とし、その後は単語単位で先頭は大文字にしてつなげて下さい。

関数「function 関数名(){ 処理内容 }」は、書くだけでは実行されません。
まずは「処理をグループ化しただけ」なのです。処理をグループ化しただけで実行されては困りますよね。前述の通り、使いたいところで呼び出して初めて実行されます。処理の流れは以下です(上記のサンプルコードと照らし合わせて見て下さい)。

前提…プログラムは上から順番に処理される。
①関数を宣言…echoHelloWorldという関数が書かれたことをプログラムは理解する(=呼び出されたら実行する状態になる)。実行はしない。
②関数を呼び出す…echoHelloWorld関数を実行する。
③関数の内容が実行される…関数内の「処理内容」が実行される。
④次の処理に進む…関数内の処理をすべて終えると、呼び出し元に戻り、次の処理に進む。

関数の戻り値

関数内の処理をすべて終えた後、関数内のデータを呼び出し元に渡すことができます。
例えば、以下のように書きます。

htdocs/PHP/test.php

<?php

// ①関数を宣言
function getHelloWorld(){
    $data = 'Hello, World';  // 変数$dataに「Hello, World」という文字列を格納
    return $data;  // ③「return データ」と書くと、呼び出し元にデータを渡すことができる
    echo 'Test';  // ここは実行されない
}

// ②関数を呼び出す
$ret = getHelloWorld();  //「変数 = 関数()」と書くと、関数の戻り値が変数に格納される
echo $ret;

// ④次の処理に進む
echo '<br>';
echo 'finished';

?>
ブラウザ

関数内で「return データ」と書くことで、データを呼び出し元に渡すことができます。このデータのことを「戻り値(返り値)」と言います。
returnは文字通り「戻る」という意味で、returnすると関数内の処理は終わり、呼び出し元に戻ります(そのため、「echo ‘Test’;」は実行されません)。

呼び出し元では「変数 = 関数()」と書くことで、「return データ」のデータを受け取り、変数に格納することができます。ここでは、「Hello, World」という文字列が変数$retに格納されます。

関数の引数

呼び出し元のデータを関数に渡し、関数内でそのデータを使うことができます。
例えば、以下のように書きます。

htdocs/PHP/test.php

<?php

// ①関数を宣言
function echoHelloWorld($argument){
    echo $argument;
}

// ②関数を呼び出す
$data = 'Hello, World';
echoHelloWorld($data);

// ③次の処理に進む
echo '<br>';
echo 'finished';

?>
ブラウザ

「function echoHelloWorld($argument)」のように、関数名の後の括弧()内に、任意の名前の変数を書きます。「関数を呼び出すときにこの変数に値を格納して」という意味です。この変数を「引数」と呼びます。

②で関数を呼び出すとき、$dataすなわち「Hello, World」という文字列を、引数に渡しています。$argumentには「Hello, World」という文字列が入るので、関数内で「echo $argument」すると「Hello, World」が出力されるのです。

以下のように、引数は複数書くことができます。

htdocs/PHP/test.php

<?php

// ①関数を宣言
function echoHelloWorld($argument1, $argument2){
    echo $argument1;
    echo '<br>';
    echo $argument2;
}

// ②関数を呼び出す
echoHelloWorld('Test1', 'Test2');

// ③次の処理に進む
echo '<br>';
echo 'finished';

?>
ブラウザ

このように、カンマ(,)区切りで引数は複数書くことができます。呼び出し元も、同じ数のデータを渡す必要があります。

クラス

概要

ここまで、変数と関数を解説してきました。
クラスとは、変数と関数をグループ化したものです。
例えば「犬」を考えて下さい。犬は名前をもっていますし、動作として吠えたりします。クラスは、この名前のような固有名詞を変数としてもち、動作を関数としてもつようなイメージになります。

例えば、以下のように書きます。

htdocs/PHP/test.php

<?php

// dog(犬)という名前のクラス
class dog
{
    // name(名前)という変数
    public $name = 'pochi';

    // bark(吠える)という関数
    public function bark(){
        echo 'bowwow';
    }

    // 名前を取得する関数
    public function getName(){
        return $this->name;
    }
}

//「new クラス名()」として、クラスを使える状態にする
$object = new dog();

// クラス内の$name変数にアクセス
echo $object->name;
echo '<br>';

// クラス内の関数bark()にアクセス
$object->bark();
echo '<br>';

// クラス内の関数getName()にアクセス
echo $object->getName();

?>

クラスは「class クラス名 { … }」のように書きます。
{ … }の中に、複数の変数と関数を書くことができます。ここでは「$name」という変数と、「bark()」「getName()」という関数を書きました。
変数の前と関数の前に「public」と書いてあります。これはクラス内で変数と関数を書く場合に必要となります。これは覚えるしかありません。

クラスは関数と同じで、書くだけでは実行されません。
まずは、「new クラス名()」ここでは「new dog()」のようにしてクラスを使える状態にします。これを、「クラスの実体をつくる」と言います。クラスという箱を先に書いておいて、newをすることで箱の中身をつくるようなイメージです。
newとは文字通り「新しい(新しくクラスという箱の中身をつくる)」という意味です。
ここでは、newをしたクラスの実体を、$objectという名前の変数に入れています。$object変数の中には、クラスの変数と関数といった実体がすべて入っています。

クラスの実体をつくると、クラス内の変数や関数にアクセスできるようになります。
クラス内の変数や関数にアクセスするには「->」を使います。
「$object->変数名」「$object->関数名」のように書きます。
ここでは「$object->name」「$object->bark()」「$object->getName()」ですね。

dogクラスのgetName()内に着目して下さい。
「$this->name」のように書かれていますね。「$this」とは文字通り「この」という意味で、ここでは「このクラス内の」という意味になります。すなわち「$this->name」は、「このクラス内のname変数」という意味です。dogクラス内のname変数にアクセスしています。

コンストラクタ

クラスの実体をつくるときに、クラスの変数を初期化したい場合があります。
例えば、dogクラスで考えると、クラスの実体をつくるとは、犬が誕生するようなイメージです。よって、クラスの実体をつくるとき(=犬が誕生したとき)に名前をつける(name変数に初期値を設定する)ようなイメージです。

例えば、以下のように書きます。

htdocs/PHP/test.php

<?php

// dog(犬)という名前のクラス
class dog
{
    // name(名前)という変数
    public $name;

    // コンストラクタ(newした瞬間に呼び出される)
    public function __construct($dogName){
        $this->name = $dog_name;
    }

    // bark(吠える)という関数
    public function bark(){
        echo 'bowwow';
    }

    // 名前を取得する関数
    public function getName(){
        return $this->name;
    }
}

//「new クラス名()」として、クラスを使える状態にする
$object = new dog('pochi');

// クラス内の$name変数にアクセス
echo $object->name;
echo '<br>';

// クラス内の関数bark()にアクセス
$object->bark();
echo '<br>';

// クラス内の関数getName()にアクセス
echo $object->getName();

?>

コンストラクタは「function __construct()」のように書きます。これは覚えるしかありません。コンストラクタは関数であり、newをした瞬間に呼び出されます。すなわち「new dog(‘pochi’)」が実行されたタイミングで、__construct()関数内の処理が実行されます。

コンストラクタには引数をつけることができ、ここでは「$dogName」という引数にしました。コンストラクタに引数をつけた場合、newをするときに引数を指定する必要があります。ここでは「new dog(‘pochi’)」としました。これがコンストラクタの引数$dogNameに入り、クラス内の変数$nameに格納されることになります。

本節の説明は以上になります。

トップページ <<前のカリキュラムへ戻る 次のカリキュラムへ進む>>

タイトルとURLをコピーしました