[PHP]5分でわかる基礎構文

はじめに

本記事では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(); #別ファイルの情報を参照できる。
  1. requireは記述された回数分指定されたファイルを読み込みます。
  2. 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はクラス自身を表します。

アクセス修飾子

  1. private:自身のクラス内で参照可能。
  2. protected:自身 + 自身の子クラスで参照可能。
  3. 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

     

     

     

    コメントを残す