スポンサーリンク
スポンサーリンク

メンバ変数へのアクセス制限

php

前回の記事で人の名前、年齢をメンバに格納しました。クラス内部のメンバ・メソッドをを自由に使えました。ですが、クラスの外部から名前、年齢を自由に設定できると、困ることもあります。年齢や名前に誤った値を設定すると不具合がでるかもしれません。年齢で0歳と設定されたりする可能性もあります。こういう状況を避けるためメンバは、

クラス外部から直接アクセスできないように

と設定するのが普通です。クラス外部から直接できないようにするにはメンバにprivateという指定を付します。

class Customer
{
//クラスの外部からアクセスできないようにする
private $name = “”;
private $age = 20;
}

上記のように書くと、$customer->nameといったようにして
アクセスすることができなくなります。

publicで公開する

privateをメンバに設定して、値を代入できないと困るので、
メンバ変数には、正しい値を設定する為のメソッドを用意します。
Customerクラスに対して名前を設定するのが、setName()、
年齢を設定するのが、setAge()を定義して、クラスの外部から
アクセスします。

メソッドには、メンバ変数に正しい値をが設定されるように、
値をチェックする機能も組み込みます。設定する年齢を
18歳~65歳に限定するようにし、それ以外の値が設定されると
エラーを表すー1が設定されるようにします。

public function setAge($a)
{
  if( $a >= 18 && $a <= 65 ){
   $this-> = $a;
  }else{
   $this->age = -1;
  }
}

setName(),setAge()メソッドには、public
付しました。publicは

クラスの外部からアクセスできる

ことを表します。正しい値を設定するメソッドをクラスの外部から
アクセスできるようにしています。
publicやprivateはアクセス演算子(access identifier)といい
これは、メンバ変数・メソッドにアクセス可能な範囲を表しています。
メソッドにアクセス演算子を付けない場合は、
publicとして指定されたものとして扱います。

アクセス演算子を使うことで、メンバ変数に直接アクセス
できないようにして、値をチェックするメソッドだけを公開ことができます。
これにより、クラス内部に意図しない値が代入されるのを未然に防ぎます。

クラス内部のデータを保護することを、カプセル化(encapsulation)と
いいます。

サンプルコードの実行結果はこちら

今回のコードでは、privateを付けてメンバ変数には直接、値を代入することはできません。その代り、アクセス演算子をつけていないメソッド(publicのメソッド)を使い、メンバ変数に値をだいにゅうしています。年齢を18歳から65歳に設定し、メンバ変数$ageに意図しない値が代入されるのを防いでいます。

オブジェクト指向

特定のモノを表すオブジェクトに着目して、プログラミングをすることをオブジェクト指向といいます。カプセル化はオブジェクト指向の重要な特徴のひとつです。

コメント

タイトルとURLをコピーしました