VS Codeでコードを書きながら、PHPの基礎構文を概観しよう:.NET開発者のためのPHPアプリお手軽開発入門(2/2 ページ)
VS CodeでPHPのコードを書きながら、その動作を確認し、その基礎構文とC#との違いなどを簡単に見ていこう。
制御構造
PHPでは、if文、while文、for文、foreach文など、読者の多くが他の言語でおなじみの制御構造が利用できる。以下で簡単に見ていこう。説明が必要なものはそれほど多くないはずだ。
if文/switch文
PHPのif文の例を以下に示す。
$name = "baz";
if ($name == "foo") {
echo "foo\n";
} elseif ($name == "bar") {
echo "bar\n";
} elseif ($name == "baz") {
echo "baz\n"
} else {
echo "other\n";
}
CやC#ライクな記述だが、PHPでは「elseif」を使う(else ifとも記述は可能)。また、各節が複数の文からなる場合には波かっこで囲んで「グループ文」(C#のブロック)とするのも、CやC#と同様だ。
switch文の例を以下に示す。
$name = "bar";
switch ($name) {
case "foo":
echo "foo\n";
break;
case "bar":
echo "bar\n";
break;
case "baz":
echo "baz\n";
break;
default:
echo "other\n";
break;
}
C#ではcase節のフォールスルーはcaseラベルが連続しているときにのみ可能だが、PHPではbreak文、continue文にぶつかるまではフォールスルーされることには注意しよう。また、PHPのswitch文は「ループ構造」と見なされるため、for文やwhile文の内部でswitch文を使っている場合、continue文を利用してループの先頭に移動しようとしたつもりでもswitch文の直下にある文が実行されることには注意が必要だ(後述。詳細は「continue」を参照されたい)。
while文/for文
while文とfor文もCやC#と同様だ。以下に例を示す。
$counter = 1;
while ($counter <= 5) {
echo "count: $counter\n";
$counter += 1;
}
for ($i=1; $i <= 5; $i++) {
echo "count: $i\n";
}
上の例を見ると分かるように、PHPではインクリメント演算子(++)も使用できるし、「+=」などの代入演算子も用意されている(これらについては一つ一つ紹介する必要はないだろう)。
break文やcontinue文も使用できる。以下に例を示す。
for ($i=1; $i < 6; $i++) {
switch ($i) {
case 1:
echo "one\n";
break;
case 3:
echo "three\n";
continue;
default:
echo $i."\n";
break;
}
echo "outer switch\n";
}
上のコードはforループ内でswitch文を利用して、変数$iの値に応じて、出力を変更し、最後に「outer switch」を出力するようにしている。C#のコードでは以下に相当する処理を行おうとしているといえる。
for (int i = 1; i <= 5; i++)
{
switch (i)
{
case 1:
Console.WriteLine("one");
break;
case 3:
Console.WriteLine("three");
continue;
default:
Console.WriteLine(i);
break;
}
Console.WriteLine("outer switch");
}
PHPの方のコード例では、「case 3:」節でcontinue文を使っている点に注目しよう。いつものつもりだとこれはforループの先頭に処理を移すように思えるが、実際にこのコードを実行してみると、次のようになる。
「three」という出力の後に「outer switch」と出力されている。これは先ほども述べたように、「switch文がループ構造と見なされる」からであり、C#のコードと同様な結果を得るには、continue文にオプションの引数「2」を与える必要がある。
foreach文
foreach文の例を示す。
$array = ["foo", "bar", "baz"];
foreach ($array as $item) {
echo $item."\n";
}
配列は上のコード例のように、その要素を「[]」に囲んで定義できる。他の定義方法もあるが、これらについては以下で触れよう。foreach文はC#とは異なり、最初に配列を指定して、asに続いて、その要素を参照する変数を記述していく。
上に示したのが、いわゆる「配列」を反復処理するための構文だ。PHPのforeach文では連想配列を処理することも可能だ。以下に連想配列を定義して、これをforeach文で処理する例を示す。
$assocarray = [
"one" => "foo",
"two" => "bar",
"three" => "baz"
];
foreach ($assocarray as $key => $value) {
echo "$key: $value\n";
}
上のコード例の通り、連想配列は「[]」内に「キー => 値」の組みをカンマで区切って記述することで定義できる。これをforeach文で処理するには、asの後ろに「$キーを受け取る変数 => $値を受け取る変数」という形式で記述する。
なお、PHPでは配列はarray関数でも定義できる。以下に例を示す。
# 1次元配列
$array2 = array(
"foo",
"bar",
"baz"
);
// 連想配列
$array2 = array(
"foo",
"bar",
"baz"
);
余談だが、1行コメントを記述するには「//」と「#」が使える。
なお、連想配列のキーに指定できるのは整数か文字列だが、他の型の値(浮動小数点数や論理値)を指定した場合は、それらが適宜整数か文字列に変換される。ただし、配列のキーに配列やオブジェクトを指定することはできない。
この他にもdo-while文、goto文などがあるが、これらについては省略する。
関数
PHPの関数はfunctionキーワードを使って定義する。以下に例を示す。
function myfunc($arg1, $arg2) {
return $arg1." ".$arg2;
}
型指定がないのを除けば、すぐに何をしているのか分かるはずだ。PHPは動的型付け言語であるため、パラメーターや戻り値型は省略可能だ。ただし、「型宣言」と呼ばれる機能を利用して、関数のパラメーターや戻り値の型を指定することも可能だ。PHP 7以降では「スカラー型宣言」として、スカラー型(文字列、整数、浮動小数点数、論理値)の各型も指定可能となっている)。以下に例を示す。
function myfunc2(string $arg1, string $arg2): string {
return $arg1." ".$arg2;
}
ただし、上記のように型指定を行っても、デフォルトでは型指定と異なる型の値を渡された場合でも、可能な限りの型変換が行われる。以下に例を示す。
<?php
function myfunc($arg1, $arg2) {
echo gettype($arg1)."\n";
return $arg1." ".$arg2;
}
function myfunc2(string $arg1, string $arg2): string {
echo gettype($arg1)."\n";
return $arg1." ".$arg2;
}
echo myfunc(1, 2), "\n";
echo myfunc2(1, 2), "\n";
上のコードをCode Runner拡張機能を使って実行した結果を以下に示す。
関数myfunc/myfunc2の呼び出しではどちらも整数を引数として渡している。これに対して、関数myfuncはそれを整数のまま受け取り、関数myfunc2では整数が文字列に変換されていることが分かる。より厳密に型チェックを行いたければ、「declare(strict_types=1);」を指定する。
今回はPHPコードを読み書きするために必要最低限な知識として、Hello Worldサンプルを例に文字列の扱い方、制御構文、関数のほんの基礎を駆け足で説明した。次回はオブジェクト指向プログラミングに必要となる要素について、やはり駆け足で見ていこう。
Copyright© Digital Advantage Corp. All Rights Reserved.