関数
関数とは処理をグループ化したものです。
大量のコードを書く場合、同じような処理内容をいたるところで書くことがあります。このようなときに、同じような処理内容をグループ化(=共通化)しておくことで、その処理を使いたいところではそのグループを呼び出すだけでよくなります。
例えば、以下のように書きます。
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に格納されることになります。
本節の説明は以上になります。