[PHP] 関数
関数は、print()のようなあらかじめ用意されているものもたくさんあるが、ユーザが定義をすることもできる。
今回は、ユーザが定義する関数について考えていく。
特徴として、JavaやC言語などでは関数を定義する際、戻り値や引数の型を意識する必要があるが、PHPでは方は意識しなくてよい。
■基本形
function 関数名() {
処理を実装
}
関数を定義する場合、function を先頭につけてあげます。
function のキーワードをもとに、そのブロックは関数として認識されます。
■戻り値がある場合
function 関数名() {
return(戻り値);
}
return 句をしようして、戻り値をしていしてあげます。
■引数を指定する場合(値渡し)
function funcname($arg) {
$arg = 100;
return $arg;
}
単純に呼び出し側から値をもらって、その値を引数の$argにコピーしています。
なので、呼び出し側で以下のような実装をした場合、渡している引数の値は変わりません。
$val1 = 300;
$val2 = functionname($val1);
print($val1);
出力結果は "300" になり、$val1が関数の呼出し前後で変更されていない。
■引数を指定する場合(参照渡し)
function funcname(&$arg) {
$arg = 100;
return $arg;
}
引数に"&"をつけることで参照渡しとなります。
その名の通り、値ではなくて値の保存されている場所(参照先)を引数で渡します。
なので、関数内で参照先の値を変えると呼び出し元の値を直接変更することになります。
$val1 = 300;
$val2 = functionname($val1);
print($val1);
出力結果は "100" になり、$val1が関数内で変更されました。
■引数を指定する場合(複数指定)
function funcname($arg1, $arg2, $arg3, ・・・) {
処理を実装
}
引数を","で区切って複数指定することができます。
■引数を指定する場合(デフォルト値を指定)
function funcname($arg = 100) {
処理を実装
}
このように引数のデフォルト値を指定することができます。
呼び出し側で該当する引数が指定されていない場合、デフォルト値がしようされます。
ちなみに、デフォルト値指定の後にデフォルト値でない引数を定義することはできないようです。
今回は、ユーザが定義する関数について考えていく。
特徴として、JavaやC言語などでは関数を定義する際、戻り値や引数の型を意識する必要があるが、PHPでは方は意識しなくてよい。
■基本形
function 関数名() {
処理を実装
}
関数を定義する場合、function を先頭につけてあげます。
function のキーワードをもとに、そのブロックは関数として認識されます。
■戻り値がある場合
function 関数名() {
return(戻り値);
}
return 句をしようして、戻り値をしていしてあげます。
■引数を指定する場合(値渡し)
function funcname($arg) {
$arg = 100;
return $arg;
}
単純に呼び出し側から値をもらって、その値を引数の$argにコピーしています。
なので、呼び出し側で以下のような実装をした場合、渡している引数の値は変わりません。
$val1 = 300;
$val2 = functionname($val1);
print($val1);
出力結果は "300" になり、$val1が関数の呼出し前後で変更されていない。
■引数を指定する場合(参照渡し)
function funcname(&$arg) {
$arg = 100;
return $arg;
}
引数に"&"をつけることで参照渡しとなります。
その名の通り、値ではなくて値の保存されている場所(参照先)を引数で渡します。
なので、関数内で参照先の値を変えると呼び出し元の値を直接変更することになります。
$val1 = 300;
$val2 = functionname($val1);
print($val1);
出力結果は "100" になり、$val1が関数内で変更されました。
■引数を指定する場合(複数指定)
function funcname($arg1, $arg2, $arg3, ・・・) {
処理を実装
}
引数を","で区切って複数指定することができます。
■引数を指定する場合(デフォルト値を指定)
function funcname($arg = 100) {
処理を実装
}
このように引数のデフォルト値を指定することができます。
呼び出し側で該当する引数が指定されていない場合、デフォルト値がしようされます。
ちなみに、デフォルト値指定の後にデフォルト値でない引数を定義することはできないようです。
[PHP] ループ処理
特定の条件を満たしている間だけ、同じ処理を繰り返したい場合に、ループ処理を使用します。
スープ処理にはいくつか表現の仕方があるので、以下に4種類を紹介。
■while文
条件式を満たしている間だけ、処理を繰り返すシンプルな構文。
例)
$cnt = 1;
while ( $cnt <= 5 ) {
print($cnt);
$cnt++;
}
※ 1~5までを順番に出力します
while文に特化したものではない(for文などでも使用可能)ですが、
途中でループを抜け出したい(break文)、ループ内の処理を止めて、
ループの判定条件を処理したい(continue文)といった方法もあります。
例)
$cnt = 1;
while ( $cnt <= 5 ) {
print($cnt);
if ($cnt == 3) {
break;
}
$cnt++;
}
※ 1~3までを出力したら、breakでループを抜けます
例)
$cnt = 1;
while ( $cnt <= 5 ) {
if (($cnt % 2) == 0) {
break;continue;
}
print($cnt);
$cnt++;
}
※ 偶数(2,4)はスキップして奇数(1,3,5)を表示します
■do-while文
while文は先に条件を満たすか判定がありますが、do-while文は処理をした後に、
繰り返し処理を行うか判定をします(少なくとも1度は処理が実行されます)。
例)
$cnt = 1;
do {
print($cnt);
$cnt++;
} while ($cnt <= 5));
※ 1~5までを順番に出力します
■for文
while文同様、条件を満たす間だけ処理を繰り返します。
ただ、条件式と一緒に、初期値と増減式を定義することができます。
例)
for ($cnt = 1; $cnt <= 5; $cnt++ ) {
print($cnt);
$cnt++;
}
※ 1~5までを順番に出力します
■foreach文
配列の要素数分、繰り返し処理を実行します。
以下の2通りの方法がある。
・配列の値を取得してループする
・配列のキーと値を取得してループする
例)
$arr = array("a1","a2","a3");
foreach($arr as $val) {
print($val);
}
※ 配列の値が出力される
例)
$arr = array("a1","a2","a3");
foreach($arr as $key => $val) {
print($key);
print($val);
}
※ 配列のキーと値が出力される
スープ処理にはいくつか表現の仕方があるので、以下に4種類を紹介。
■while文
条件式を満たしている間だけ、処理を繰り返すシンプルな構文。
例)
$cnt = 1;
while ( $cnt <= 5 ) {
print($cnt);
$cnt++;
}
※ 1~5までを順番に出力します
while文に特化したものではない(for文などでも使用可能)ですが、
途中でループを抜け出したい(break文)、ループ内の処理を止めて、
ループの判定条件を処理したい(continue文)といった方法もあります。
例)
$cnt = 1;
while ( $cnt <= 5 ) {
print($cnt);
if ($cnt == 3) {
break;
}
$cnt++;
}
※ 1~3までを出力したら、breakでループを抜けます
例)
$cnt = 1;
while ( $cnt <= 5 ) {
if (($cnt % 2) == 0) {
break;continue;
}
print($cnt);
$cnt++;
}
※ 偶数(2,4)はスキップして奇数(1,3,5)を表示します
■do-while文
while文は先に条件を満たすか判定がありますが、do-while文は処理をした後に、
繰り返し処理を行うか判定をします(少なくとも1度は処理が実行されます)。
例)
$cnt = 1;
do {
print($cnt);
$cnt++;
} while ($cnt <= 5));
※ 1~5までを順番に出力します
■for文
while文同様、条件を満たす間だけ処理を繰り返します。
ただ、条件式と一緒に、初期値と増減式を定義することができます。
例)
for ($cnt = 1; $cnt <= 5; $cnt++ ) {
print($cnt);
$cnt++;
}
※ 1~5までを順番に出力します
■foreach文
配列の要素数分、繰り返し処理を実行します。
以下の2通りの方法がある。
・配列の値を取得してループする
・配列のキーと値を取得してループする
例)
$arr = array("a1","a2","a3");
foreach($arr as $val) {
print($val);
}
※ 配列の値が出力される
例)
$arr = array("a1","a2","a3");
foreach($arr as $key => $val) {
print($key);
print($val);
}
※ 配列のキーと値が出力される
[PHP] 条件分岐
■if文
「条件A」を満たす場合は、「処理B」を実行したい場合、
if文を使用します。
例)
ちなみに、上記のように処理が1行だけの場合は{}を省略することも可能。
例)
■if-else文
「条件A」を満たす場合は「処理B」を実行し、それ以外の場合、
「処理C」を実行するときはif-else文を使用します。
例)
■if-elseif文
「条件A」を満たす場合は「処理B」を実行し、「条件C」を満たす場合は、
「処理D」を実行し、それ以外の場合は「処理E」を実行するような場合、
if-elseif文を使用します。
例)
■switch文
if-elseif文のように複数のケースを持つ場合、switch文を使用したほうが
スッキリしたプログラムになることがある。
例)
$xの値によって処理を分けるサンプルです。
それぞれ、case文で処理を分けて条件を満たさない場合の
処理をdefault文に記載します。
「条件A」を満たす場合は、「処理B」を実行したい場合、
if文を使用します。
例)
$x = 100;
if ($x > 50) { // 「条件A」
print("「処理B」");
}
ちなみに、上記のように処理が1行だけの場合は{}を省略することも可能。
例)
$x = 100;
if ($x > 50) // 「条件A」
print("「処理B」");
■if-else文
「条件A」を満たす場合は「処理B」を実行し、それ以外の場合、
「処理C」を実行するときはif-else文を使用します。
例)
$x = 10;
if ($x > 50) { // 「条件A」
print("「処理B」");
} else {
print("「処理C」");
}
■if-elseif文
「条件A」を満たす場合は「処理B」を実行し、「条件C」を満たす場合は、
「処理D」を実行し、それ以外の場合は「処理E」を実行するような場合、
if-elseif文を使用します。
例)
$x = 100;
if ($x > 50) { // 「条件A」
print("「処理B」");
} elseif ($x <30) { // 「条件C」
print("「処理D」");
} else {
print("「処理E」");
}
■switch文
if-elseif文のように複数のケースを持つ場合、switch文を使用したほうが
スッキリしたプログラムになることがある。
例)
$x = "C";
switch ($x){
case "A";
print("処理A");
break;
case "B";
print("処理B");
break;
case "C";
print("処理C");
break;
default:
print("処理D");
}
$xの値によって処理を分けるサンプルです。
それぞれ、case文で処理を分けて条件を満たさない場合の
処理をdefault文に記載します。
[PHP] 演算子
演算子については、他のプログラミング言語と
ほとんど同じですな。
■算術演算子
■代入演算子
■比較演算子
■論理演算子
ほとんど同じですな。
■算術演算子
$x + $y 足し算
$x - $y 引き算
$x * $y 掛け算
$x / $y 割り算
$x % $y ($x / $y)の余り
-$x 符号(プラス/マイナス)を逆転
■代入演算子
$x = $y $xに$yを代入する
$x += $y $xに($x+$y)を代入する
$x -= $y $xに($x-$y)を代入する
$x *= $y $xに($x*$y)を代入する
$x /= $y $xに($x/$y)を代入する
$x .= $y $xに$xと$yを連結した値を代入する(文字列の連結)
++$x $xに1を加算する($xを返す前に加算)
--$x $xに1を減算する($xを返す前に減算)
$x++ $xに1を加算する($xを返した後に加算)
$x-- $xに1を減算する($xを返した後に減算)
■比較演算子
$x == $y $xと$yが等しい
$x != $y $xと$yが等しくない
$x <> $y $xと$yが等しくない
$x < $y $xが$yより小さい
$x > $y $xが$yより大きい
$x <= $y $xが$yより小さいか等しい
$x >= $y $xが$yより大きいか等しい
■論理演算子
!$x $xがfalseならtrueを返す
$x && $y $xがtrueかつ$yがtrueならtrueを返す
$x || $y $xがtrueまたは$yがtrueならtrueを返す
$x and $y $xがtrueかつ$yがtrueならtrueを返す
$x or $y $xがtrueまたは$yがtrueならtrueを返す
$x xor $y $xまたは$yがtrue、かつ$x、$yのどちらかがfalseの場合trueを返す
[PHP] 配列
PHPでも配列を使用することができます。
"$val[n]" のように変数名の後ろに添え字指定してあげることで、
配列として扱うことができます。
例)
$val[0] = "test1";
$val[1] = "test2";
print_r($val);
出力結果は、
Array ( [0] => test1 [1] => test2 )
となる。
また、以下のように一括で配列データを変数に格納することもできる。
例)
$val2 =array("tes3", "tes4");
print_r($val2);
出力結果は、
Array ( [0] => test3 [1] => test4 )
となる。
※print_r()は変数の情報を解りやすく出力してくれる関数です。
参考サイト:http://php.net/manual/ja/function.print-r.php
■連想配列
配列のキーを添字ではなく、任意の文字列キーで指定することができ、
これを連想配列といいます。
JavaのMapみたいな感じで考えられるのかな。
例)
$val['a'] = "test1";
$val['b'] = "test2";
print_r($val);
出力結果は、
Array ( [a] => test1 [b] => test2 )
となる。
■添え字の配列と連想配列の混合
添え字の配列も連想配列も方は自動判定なので、添え字を文字と考えれば、
キーは添え字と文字列を混在させることが可能となる。
例)
$val[0] = "test1";
$val['b'] = "test2";
print_r($val);
出力結果は、
Array ( [0] => test1 [b] => test2 )
となる。
"$val[n]" のように変数名の後ろに添え字指定してあげることで、
配列として扱うことができます。
例)
$val[0] = "test1";
$val[1] = "test2";
print_r($val);
出力結果は、
Array ( [0] => test1 [1] => test2 )
となる。
また、以下のように一括で配列データを変数に格納することもできる。
例)
$val2 =array("tes3", "tes4");
print_r($val2);
出力結果は、
Array ( [0] => test3 [1] => test4 )
となる。
※print_r()は変数の情報を解りやすく出力してくれる関数です。
参考サイト:http://php.net/manual/ja/function.print-r.php
■連想配列
配列のキーを添字ではなく、任意の文字列キーで指定することができ、
これを連想配列といいます。
JavaのMapみたいな感じで考えられるのかな。
例)
$val['a'] = "test1";
$val['b'] = "test2";
print_r($val);
出力結果は、
Array ( [a] => test1 [b] => test2 )
となる。
■添え字の配列と連想配列の混合
添え字の配列も連想配列も方は自動判定なので、添え字を文字と考えれば、
キーは添え字と文字列を混在させることが可能となる。
例)
$val[0] = "test1";
$val['b'] = "test2";
print_r($val);
出力結果は、
Array ( [0] => test1 [b] => test2 )
となる。