メンバ変数へのアクセスとメンバメソッドからの値の取得

広告

アクセス修飾子を設定したメンバ変数へのアクセス方法について確認しておきます。

まずはメンバ変数をpublicに設定した場合です。publicにしておけば外部からも自由に変数の値を変更できるので柔軟性はありますが、意図しない形で変数の値を書き換えられたり、本来設定出来ないような値を自由に設定出来てしまいます。

例えばテレビのチャンネルであれば1から12の間の数値しか設定出来ないようにしたかったとしても、メンバ変数の値を外部から直接設定できるようになっていれば、20とか30などの想定外の値を設定出来てしまいます。

$tv = new Television();
$tv->channelNo = 20;

class Television(){
  public $channelNo;

  function setChannel($channel){
    $this->channelNo = $channel;
  }
}

そこでメンバ変数はprivateに設定しておき、メンバ変数の変更はメンバメソッド経由でのみ可能にします。メソッド経由で設定することで、事前に値の範囲をチェックすることができますので、不適切な値を設定されてしまう危険性が無くなるわけです。

$tv = new Television();
$tv->setChannelNo(20);

class Television(){
  public $channelNo;

  function setChannel($channel){
    if (($channel >= 1) and ($channel <= 12)){
      $this->channelNo = $channel;
    }
  }
}

小規模なプログラムを単独で開発しているのであれば気にする事も無いかもしれませんが、汎用的なクラスを作成し、繰り返し色々な人がそのクラスを利用してプログラミングを行う場合、意図しない形で利用されないようにしておくことも重要となります。

またprivateにしたためメンバ変数の値を直接参照することも出来なくなっています。その為、メンバ変数の値を取得できるようなメソッドを別途定義することでメンバ変数の値を取得できます。

$tv = new Television();
$tv->setChannelNo(20);
print('現在のチャンネルは'.$tv->getChannel());

class Television(){
  public $channelNo;

  function setChannel($channel){
    if (($channel >= 1) and ($channel <= 12)){
      $this->channelNo = $channel;
    }
  }

  function getChannel(){
    return $this->channelNo;
  }
}

上記のようにメンバメソッド内から呼び出し元に値を返したい時には"return"を使います。

class クラス名{
  public メンバ変数名;

  function メンバメソッド名(引数1, 引数2, ...){
    // クラスの中で行う処理

    return ;
  }
}
サンプルコード

では実際に試しておきましょう。

<html>
<head><title>PHP TEST</title></head>
<body>

<?php

$tv = new Television();

$tv->setChannel(20);
print('現在のチャンネルは'.$tv->getChannel().'<br>');

$tv->setChannel(10);
print('現在のチャンネルは'.$tv->getChannel().'<br>');

class Television{
  private $channelNo = 8;

  function setChannel($channel){
    if (($channel >= 1) and ($channel <= 12)){
      $this->channelNo = $channel;
    }else{
      print('チャンネルは1から12の間で設定して下さい<br>');
    }
  }

  function getChannel(){
    return $this->channelNo;
  }
}

?>
</body>
</html>

上記のファイルをWWWサーバに設置しブラウザ経由で見ると下記のように表示されます。

アクセス修飾子の意味

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。