PHP プログラミング

PHPの基本 Part 5(クラス、オブジェクト)(全10回)

Javaプログラマの目線でPHPの基本をまとめています。

クラス定義について

クラスの定義はclass <クラス名>{ }という形で定義する。JAVAと異なり、publicなどのアクセス修飾子はつけない。

オブジェクトの参照についてオブジェクトを格納した変数には、実際にはオブジェクトを参照するポインタが格納されている。

$b = $aのような値渡しをしたとき、$bにはオブジェクトを参照するポインタがコピーされる。

このとき、$aと$bは同じオブジェクトを参照しているので、一見、参照渡しをしているかのように見えるが、そうではなく、$aと$bの実体は別々のポインタである。

例えば$b = null;のようにnullをセットしたとき、$aはオブジェクトを参照したままであり、nullにならない。

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

$b = &$aのように参照を渡すとき、$bには$aのオブジェクトを参照するポインタの実体が渡されるので$bと$aの中身は同じポインタであり、$b = null;とした場合は、$aもnullとなる。

オブジェクトのメソッド、プロパティへのアクセス

  • アロー演算子を用いる(以下)。
    $a->doTest();
  • プロパティを参照するとき、$をつけない
    echo $a->name, PHP_EOL;
  • クラスに定義されていないプロパティ、メソッドを追加できる

アクセス修飾子

  • public, private, protected
  • アクセス修飾子を省略した場合はpublicとして扱われる。JAVAでいうpackage privateはない。
  • オーバーライドされる想定でないpublic, protectedのメソッドにはfinalをつける。
  • クラスの静的メソッドはstaticをつける。
    static変数は、リテラルまたは定数でのみ初期化できる。
  • メソッド修飾子の記述順序 

自己参照 

  • オブジェクトの参照: $this
  • クラスの参照
    self::(selfとダブルコロンでメソッド、定数(self::MAX_NUMBER)、プロパティ(self::$number)にアクセス)
  • self::TestClass::は同義
  • new self()のようにインスタンスを生成できる

コンストラクタ、デストラクタ

  • function __construct([arg, ...])
  • function __destruct(arg, ...)
  • PHP4ではマジックメソッドがなかったので、コンストラクタの定義はJAVAと同じようにクラス名で定義していた。 PHP5ではマジックメソッドと、PHP4の定義の仕方と両方使える
  • PHP5.3.3以降は名前空間に定義されたクラスに限り、マジックメソッドのコンストラクタのみ有効である