メインコンテンツまでスキップ

PHPの基本文法

プログラミング言語は、書き方に若干の違いはあれど、大きな差があるわけではありません。JavaScript の学習の成果は、ほとんどそのまま PHP にも適用できます。

PHP の特徴

変数名の頭に$をつける

PHP では、変数名の最初には必ず$をつける必要があります。JavaScript と異なり、変数を宣言する必要はありません。代入文を記述すれば、変数は自動的に生成されます。

$name = 'Tanaka';
$age = 19;

文字列リテラルのダブルクォートとシングルクォートが区別される

JavaScript では、文字列を表すとき、ダブルクォートで囲んでもシングルクォートで囲んでも差異はありませんでした。しかしながら、PHP においては、両者は厳密に区別されます。シングルクォートはごく普通の文字列リテラルなのですが、ダブルクォートは JavaScript におけるテンプレートリテラルに近く、$記号から始まる文字列が自動的に変数として展開されます。以下のコードを実行してみましょう。

$age = 20;
print('I am $age years old.'); // I am $age years old.
print("I am $age years old."); // I am 20 years old.

基本的にはシングルクォートを使用し、ダブルクォートは必要に応じて使用するのが良いでしょう。

基本構文

変数の使用と定数の宣言

// 変数
$wonderful_variable = 'Hello';

// 定数
const SUPER_CONSTANT_VALUE = 123;
define('EXCELLENT_CONSTANT_VALUE', 'abc');

print(SUPER_CONSTANT_VALUE); // 123

PHP の定数は、数値、文字列、論理値と、配列のみに対して使用できます。JavaScript のconstのように、通常の変数と同じように使用することはできません。また、定数を使用する際は$記号をつける必要がありません。

変数名は小文字のスネークケース(単語の区切りをアンダーバーで表記する手法)、定数名は大文字のスネークケースを使用しましょう。

配列(リスト)と連想配列

$fruits = ['apple', 'banana', 'lemon'];

print($fruits[0]); // apple
print(count($fruits)); // 3

$fruits[] = 'strawberry'; // $fruits = ['apple', 'banana', 'lemon', 'strawberry']
array_push($fruits, 'melon'); // $fruits = ['apple', 'banana', 'lemon', 'strawberry', 'melon']

PHP の配列は、JavaScript の配列と記法は似ていますが、配列に対する操作はメソッドではなく関数を用いて行います。

$grades = ['japanese' => 67, 'math' => 80];
print($grades['japanese']); // 67

連想配列は「キー」+「値」形式のデータ構造です。JavaScript オブジェクトと似ていますが、キー名にはクォーテーションが必要で、アクセスにはブラケット記法を使用する必要があります。配列とは似て非なるものです。

制御構文

PHP のif文、while文、for文は至って標準的な形式です。

if (20 <= $age) {
print('ようこそ!オトナの世界へ!');
} else if (18 <= $age && $age < 20) {
print('もう少し...');
} else {
print('子供は寝る時間ですよ。');
}

while ($remaining > 0) {
print("まだですよ");
$remaining--;
}

for ($i = 0; $i < count($students); $i++) {
print($students[$i]);
}

配列と連想配列の列挙

JavaScript のfor ofと同じく、列挙可能な値を列挙するための構文が存在します。foreach 文です。2 種類の書き方があります。

$sum = 0;
$numbers = [1, 3, 6, 8];
foreach ($numbers as $number) {
$sum += $number;
}

$grades = ['japanese' => 67, 'math' => 80];
foreach ($grades as $subject => $points) {
print("$subject: $points");
}

foreach ($array as $value)の形式では、配列(または連想配列)の値だけを取り出します。foreach ($array as $key => $value)を使用すると、連想配列ではキーと値を、配列では添字と値を使用することができます。

関数の定義

function add($a, $b) {
return $a + $b;
}
print(add(1, 2));

こちらも至って一般的です。

クラスとアクセス修飾子

class Dog
{
private $age;
public $name;
public function __construct($age) {
$this->age = $age;
}
public function bark() {
if ($this->age > 5) {
print('バウバウ');
} else {
print('ワンワン');
}
}
}

$pochi = new Dog(8);
$pochi->bark();

PHP のクラスでは、インスタンスのフィールドやメソッドへのアクセスのために、ドットの代わりに->を使用します。これはおそらく、PHP におけるドット記号は、文字列結合演算子(JavaScript における+)として利用されていたためだと考えられます。

また、PHP では、フィールドやメソッドの定義の前にアクセス修飾子を付加することができます。PHP のアクセス修飾子は 3 種類で、

アクセス修飾子意味
public全ての場所からアクセス可能
privateクラスの定義内からのみアクセス可能
protectedクラスの定義内と、継承先のクラスの定義内からのみアクセス可能

が利用できます。上記の例の場合、nameフィールドはprivate指定されていますので、

$pochi = new Dog(8);
print($pochi->age);

はエラーとなります。なお、フィールドのアクセス修飾子は省略できませんが、メソッドのアクセス修飾子は省略可能で、その場合は自動的にpublicが指定されたものとみなされます。

その他、コンストラクタに__construct()を使用する等、細かい違いがあります。

無名関数

JavaScript と同様に、PHP でも無名関数が使用できます。

$numbers = [1, 2, 3, 4, 5];
$doubled_numbers = array_map(function($item) {
return $item * 2;
}, $numbers);
print_r($doubled_numbers);

PHP の無名関数は、function ($引数1, $引数2, …) { 処理; }の形式です。print_r関数は、配列の中身を見やすい形式で出力してくれる便利関数です。

課題

2 ~ 100 までの数値のうち、素数のみを選んで表示するプログラムを作成してください。