php spot
phpが使えるレンタルサーバー特集
検索グラス
トップページへ

メンバ変数、メンバ関数のアクセス制限
PHP5ではオブジェクトのメンバ変数、メンバ関数にアクセス制限をつけられるようになりました。
これはJavaなどでは当たり前の機能でしたが、PHP4では存在しませんでした。

PHP4におけるクラス定義
class classOnPHP4 {
  var $hensu1;
  function kansu()
  {
    
  }
}

PHP4のクラスはこんな感じ。シンプルでよいものの、設計上、メンバ関数を上書きしてしまっても気付かないだとか、どの変数でも外部から自由に変更できてしまっていました。

PHP5におけるクラス定義
class classOnPHP5 {
  private $hensu1;
  protected $hensu2="test";
  public $hensu3="hoge";
  private function kansu1()
  {
    
  }
  protected function kansu2()
  {
    
  }
  public function kansu3()
  {
    // アクセス修飾子を省略した場合はデフォルトでpublicになります。
  }
}

のようにメンバ変数、メンバ関数に3種類のアクセス制限をかけられるようになっています。

private は外部からアクセスできません。
例えば、$obj->hensu1=1; のようなことを外部からやろうとするとエラーが発生します。
また、$obj->kansu1(); を外部から呼び出すこともできません。

protected も private と同じで、外部からメンバ関数、変数ともアクセスは出来ません。
ただし、このクラスを継承したクラスからの参照が出来ます。
class classOnPHP5Ex extends classOnPHP5 {
  function kansu4()
    echo $this->hensu1; // ←これはエラー
    echo $this->hensu2; // ←これはOK
  }
}

のように 継承したクラスは 上位クラスの protected を読み込めます。
private はかなり制限されているということも分かりますね。

public は、PHP4 と同じように使えます。
外部から メンバ変数は、$obj->hensu = "test" のように書き換えることが出来ますし、メンバ関数は $obj->kansu3(); のように自由に呼び出せます。
PHP4 で使った var も public な扱いとなります。
そのまま使えますが、var は使わない方がよいというふうになっているようです。

こんな感じでPHP5ではより厳密にクラス定義が出来るというわけですね。
一見面倒ですが、誤って private なはずの変数が外部から上書きされてしまうようなことを防ぐことができ、バグの混入率が少なくなります。これは複数人数でプログラミングを行う際などに混入しやすいバグなのですが、これを防げるというわけですね。

面倒〜って人は今までのままプログラミングしても問題なく動きますので乗り換えてもまあ安心、ってわけです。

スポンサードリンク



もどる
管理人の新着ブログ記事

    プライバシーポリシー | お問い合わせ
copyright © 2003-2018 phpspot all rights reserved. powered by phpspot CMS.