プライベートな変数とその変数を得るためのメソッドを定義

最後にmsgというプライベートな変数を定義しつつ、その変数を得るためのメソッドを定義してみましょう。

PHPの場合

まず、プライベート変数だけ定義してみます

class SimpleClass {
  public $message = 'Public';
  private $msg = 'Private';
  public function printHello(){
    print("newしたオブジェクトからは呼び出せる");
  }
}

上記定義した後に

$obj = new SimpleClass();
print $obj->msg;

とするとCannot access private property SimpleClass::$msg というメッセージが表示されるかと思います。

名前の通りプライベートな変数なので外部からは直接呼び出せません。 そこで、このプライベートな変数にアクセスできるgetMsgというパブリックなメソッドを定義します。

class SimpleClass {
  public $message = 'Public';
  private $msg = 'Private';
  function printHello(){
    print("newしたオブジェクトからは呼び出せる");
  }
  public function getMsg(){
      print($this->msg);
  }

}

上記のようにした上で、以下のようにgetMsg()を通じて、SimpleClassクラスの中で定義されてるプライベートな変数にアクセスして画面表示されます

$obj = new SimpleClass();
$obj->getMsg();

JavaScriptの場合

以下のようにすることで、プライベートなmsg変数を定義できます。パブリックな変数を定義した際には、this.xxxとしましたが、プライベートな変数の場合には、JavaScriptの変数スコープが関数単位である特徴を活かして以下のようにしてあげればプライベートなものとして利用できます。

var SimpleClass;
SimpleClass = (function(){
  var msg = 'Private';
  function SimpleClass() {
    this.message = 'Public';
  }
  SimpleClass.prototype.printHello = function () {
    console.log("newしたオブジェクトからは呼び出せる");
  };
  return SimpleClass;
})();

上記定義したものに対して

var obj = new SimpleClass();
console.log(obj.msg());

とすると、以下のようにエラーになります。

console.log(obj.msg());
                ^
TypeError: Object #<SimpleClass> has no method 'msg'

プライベートなmsgにアクセスするために、getMsg()メソッドを定義するには以下のようにします。

var SimpleClass;
SimpleClass = (function(){
  var msg = 'Private';
  function SimpleClass() {
    this.message = 'Public';
  }
  SimpleClass.prototype.printHello = function () {
    console.log("newしたオブジェクトからは呼び出せる");
  };
  SimpleClass.prototype.getMsg = function () {
    console.log(msg);
  };  
  return SimpleClass;
})();

上記定義したものに対して以下のようにすると、画面上にPrivateという文字が表示されます

var obj = new SimpleClass();
console.log(obj.msg());