はじめに
本記事ではPHPの基礎的な構文を掲載します。
リファレンスのような側面が強いので、初心者に向けた細かい解説などはありません。ターゲットはPHP以外の言語を触れたことがあり「for文があることは知っている。phpではそれをどうやって記述するか。」ということを知りたい人です。
基礎構文
コメント
# 単一行コメント (2種類)
# コメントアウト
// コメントアウト
# 複数行コメントアウト
/*
コメントアウト
*/
コンソール操作
# コンソール出力
echo '文字列';
文字列操作
文字列結合
# 定数と定数
echo "こんにちは"."こんばんは";
# 定数と変数
$str = "こんばんは";
echo "こんにちは".$str;
結合には「.」(ドット)を使用します。
文字列代入
# 文字列の結合 + 代入の省略形「.=」
$str = "サバンナ";
$str .= "ちほー";
echo $str; #サバンナちほー
変数展開
$hello = "こんにちは";
echo "abc {$hello} de"; # abc こんにちは de
echo 'abc {$hello} de'; # abc {$hello} de
文字列は「ダブルクォーテーション(“”)」と「シングルクォーテーション(”)」で囲うことができますが、
ダブルクォーテーションの場合、{$変数名}を埋め込むことで文字列結合「.」なしに文字列結合がなされます。
ちなみにRubyの変数展開は【#{変数名}】と記述します。紛らわしいですね。
変数
$hello = "こんにちは"
$value = 300
- $が必ず先頭に必要になります。
- 明示的な型の宣言は不要です。
関数
# 通常の定義
function myMethod() { 処理 }
# 引数あり
function myMethod($arg1, $arg2, $arg3) { 処理 }
# 戻り値あり
function myMethod() { 処理...; return 戻り値; }
演算子
論理演算子
# And 演算子「&&」
# A かつ Bの時True
if ($x == 30 && $y == 40) { }
# Or 演算子「||」
# A または BでTrue
if ($x == 30 || $y == 40) { }
# Not 演算子「!」
# AがFalseのときTrue
if !($x == 30) { }
配列と連想配列
配列
# 定義
# 型は混在可能。
$arr = array("value1", "value2", 30);
# 参照
$arr[2] # 30
# 要素の追加(末尾へ)
$arr[] = "new_value";
# 要素数取得
count($arr); # 3
連想配列
# 定義
# 型は混在可能。
$map = array("key1" => "value1",
"key2" => "value2",
"key3" => 30
# 参照
$map["key1"]
# 要素の追加 (末尾へ)
$map["new_key"] = "new_value"
制御文
if文
if (条件式) {
処理
} elseif (条件式) {
処理
} else {
処理
}
for文
for ($i = 0; $i <= 100; $i++) {
処理
}
foreach文
# 配列の場合
$arr = array(10, 20, 30);
foreach ($arr as $item) {
# 10, 20, 30
echo $item;
}
# 連想配列の場合
$map = array("key1" => 10, "key2" => 20, "key3" => 30);
foreach($scores as $key => $value) {
# key1 / 10, key2 / 20, key3 / 30
echo "{$key} / {$value}";
}
while文
while (条件式) {
処理
}
continue, break
# continue (0, 1, 2, 4)
for ($i = 0; $i < 5; $i++) {
if ($i == 3) {
continue;
}
}
# break (0, 1, 2)
for ($i = 0; $i < 5; $i++) {
if ($i == 3) {
break;
}
}
switch文
switch(値) {
case 0:
処理
break;
case 1:
処理
break;
default:
処理
break;
}
- switchに渡す「値」は文字列でもOKです。
ファイル分割
function myMethod() { echo "Hello!"; }
# ()はなくてもOK
# 相対パスで指定する
require("./util.php");
require_once("./util.php");
myMethod(); #別ファイルの情報を参照できる。
- requireは記述された回数分指定されたファイルを読み込みます。
- require_onceは1度だけファイルを読み込みます。
- 外部ファイルに変数などがある場合、「require」では二重定義エラーになってしまうため、基本的には「require_once」で統一するとよいでしょう。
クラス
定義
class Animal {
# インスタンスフィールド
public $age;
# クラスフィールド
public static $birth_count = 0;
# インスタンスメソッド
public function greeting() {
echo "私は{$this -> name}才です。";
self::birth_count++;
}
# クラスメソッド
public static function showBirthCounter() {
echo "{self::$birth_count}体の動物が生を受けました。";
# コンストラクタ
public function __construct($age) {
$this->age = $age
}
}
コンストラクタ
- 固定の名前「__construct」です。
インスタンスフィールド/インスタンスメソッド
- クラス内では「$this ->」を、クラス外では「インスタンス変数->」でアクセスします。
- $thisはインスタンス自身を表します。
クラスフィールド/クラスメソッド
- 「static」を付けることで定義できます。
- クラス内では「self::」を、クラス外では「クラス名::」でアクセスします。
- selfはクラス自身を表します。
アクセス修飾子
- private:自身のクラス内で参照可能。
- protected:自身 + 自身の子クラスで参照可能。
- public:どこからでも参照可能。
生成/参照
# インスタンス生成
$animal = new Animal(7);
# インスタンスフィールド/メソッドへのアクセス
$animal -> age = 100;
$animal -> greeting();
# クラスフィールド/メソッドへのアクセス
Animal::$birth_count = 0;
Animal::showBirthCount();
継承
# 継承元 : Animal, 継承先 : Cat
class Cat extends Animal {
public __construct(age) {
# 継承元のコンストラクタの呼び出し
parent::__construct(age);
}
}
parent::
- オーバーライド元のメソッドを呼び出すときに使用します。
型判定
$animal = new Animal();
# インスタンス変数の型が一致しているかどうかを判定する。
if ($animal instanceof Animal){} # True
if ($animal instanceof Plant){} # False