オブジェクト指向プログラミングが分かってる人のためのPHP入門

タイトルのようにオブジェクト指向プログラミングをすでに知っている人のためのPHP入門です。PHPの文法をまとめています。

PHPの記述

変数名はアルファベットかアンダーバーで始まって、それにアルファベット・アンダーバー・数字が続きます。また大文字と小文字は区別されます。変数の型は明示的に指定する必要はありません。phpは<?phpで始まって?>で終わりますが、ファイルの最後の?>は書かないことが普通です。

$var = 'Hello world!'; // 変数の定義
define("PAI", 3.14159); // 定数の定義(定数に「$」は不要。慣習的に大文字にする)
print $var;
// コメント文
#  コメント文
/*
   コメントブロック
   コメントブロック
    */

変数の参照

$var1 = 10;
$var2 = $var1; // 変数の代入
$var1 = 1;
 
print $var1; // 1
print $var2; // 10
 
$var1 = 20;
$var2 =& $var1; // 変数の参照(エイリアスになる)
$var1 = 2; // 参照元である$var1が変更されたので$var2の値も2に変更される
 
print $var1; // 2
print $var2; // 2

文字列の操作

$var = 'te'.'st'; // 文字列の連結($var = 'test')
echo $var, 'test'; // "testtest"が出力される
 
$var = 'test';
echo "This is a $var"; // 文字列の中での変数展開("This is a test"が出力される。変数展開がされるのはダブルクオテーションで囲った場合のみ)
 
echo 10 + '100%'; // 先頭に数字を含む文字列に対して数値演算すると数値に変換される("110"が出力される)

代入演算子

$var1 += 10; // $var1 = $var1 + 10と同じ
$var2 -= 20; // $var1 = $var1 - 20と同じ
$var3 *= 30; // $var1 = $var1 * 30と同じ
$var4 /= 40; // $var1 = $var1 / 40と同じ
$var5 %= 50; // $var5 = $var5 % 50と同じ
$str = 'テス';
$str .= 'ト'; // $str = 'テスト'になる

配列の定義と操作

$var1 = array('key1' => 'test', 'key2' => 10); // 連想配列(キーが省略されると0から始まる整数がキーとして自動的に付与される)
echo $var1[key1]; // 連想配列の要素の参照("test"が出力される)
$num = $var1[key2]; // $num = 10
 
print_r($var); // 配列の要素を出力する
 
$var2 = array('key1' => 50, 'key2' => 100);
 
$var3 = array($var1,$var2); // 多次元配列
 
print $var3[0][1]; // 多次元配列の参照("10"が出力される)
 
foreach ($var1 as $arrayElement) {
  print $arrayElement; // 要素を順に出力
}
 
foreach ($var1 as $keyVariable => $arrayElement) {
  print $keyVariable.':'.$arrayElement; // キーと要素を順に出力
}
 
foreach ($var2 as &$arrayElement) {
  $arrayElement *= 10; // すべての配列要素を10倍する
}
unset($arrayElement); // 配列の最後の要素に対する参照を解除

条件分岐

$hoge = 10;
 
if ( $hoge == 10 ) { // 値が等しければTRUE(値が等しいのでTRUE)
  // TRUEだった場合の処理
}
elseif ( $hoge === '10' ) { // 値と型が等しければTRUE(文字列が数値に変換されて、値も型も等しいのでTRUE)
  // TRUEだった場合の処理
}
elseif ( $hoge != 1 ) { // 値が異なればTRUE(値が異なるのでTRUE)
  // TRUEだった場合の処理
}
elseif ( $hoge !== 10 ) { // 値か型が異なればTRUE(値も型も等しいのでFALSE)
  // TRUEだった場合の処理
}
elseif ( $hoge > 1 ) { // 1より大きければTRUE(10は1より大きいのでTRUE)
  // TRUEだった場合の処理
}
elseif ( $hoge >= 1 ) { // 1以上であればTRUE(10は1以上なのでTRUE)
  // TRUEだった場合の処理
}
elseif ( $hoge < 1 ) { // 1より小さければTRUE(10は1より小さくないのでFALSE)
  // TRUEだった場合の処理
}
elseif ( $hoge <= 1 ) { // 1以下であればTRUE(10は1以下ではないなのでFALSE)
  // TRUEだった場合の処理
}
else {
  // すべての条件に対してFALSEだった場合の処理
}
 
$hoge = 9;
 
$result = $hoge > 5 ? 'large' : 'small'; // 三項演算子($hogeが5より大きいと$result = 'large'、5以下だと$result = 'small'になる)

クラスの定義とオブジェクトの生成

メンバメソッドにアクセス修飾子(public、private、protected)を指定しない場合はpublicになります。

class className( $classVar1, ... ) { // クラスの定義(引数をもてる)
 
  public $memberVariable1;    // メンバ変数(クラス内外から参照可能)
  private $memberVariable2;   // メンバ変数(同じクラス内から参照可能)
  protected $memberVariable3; // メンバ変数(同じクラス、もしくは子クラスから参照可能)
  const PI = 3.14159;         // クラス内の定数
 
  function memberMethod1( $methodVar1, ... ) { // メンバメソッド(引数をもてる)
    // 処理
  }
 
  function memberMethod2() {
    $this -> $memberVariable2; // クラス内からのメンバ変数へのアクセス
    $this -> memberMethod1();  // クラス内からのメンバメソッドへのアクセス
    print( self::PI );         // 定数への参照にはすべてのオブジェクトに共通となるselfを使う
 
  }
 
  function __construct( $constrctVar1, ... ) { // コンストラクタ(引数をもてる)
    // 処理
  }
 
  function getter() { // privateなメンバ変数をクラス外から参照するためのメソッド
    return $this -> $memberVariable2; // privateなメンバ変数を返す
  }
 
}
 
$instance = new className($argument1); // オブジェクトの生成
$instance -> $memberVariable1 = 10;    // publicなメンバ変数の参照と代入
$instance -> memberMethod1();          // メンバメソッドの参照