B340 メソッドの作成・アクセス修飾子

メソッド とは、オブジェクト に関連付いた関数のことです。オブジェクト自身に関する操作や振る舞いを行います。また、アクセス修飾子を用いることでそのメソッドへのアクセス権の設定をすることができます。今回はメソッドとアクセス修飾子について紹介します。

メソッドの基本

メソッドの作成方法

クラスの中に関数を定義することでメソッドを定義することができます。

PHP
//クラス定義
class greeting{
 //メソッド定義
 function morning(){ echo 'おはようございます。'; }
}
//インスタンス化
$obj = new greeting;
//メソッドコール
$obj->morning();

出力結果

PHP
おはようございます。

上記は、greetingクラスを作成しその中にmorningメソッドを作成しております。そしてgreetingクラスのインスタンスを作成し、morningメソッドを用いております。

コンストラクタ

コンストラクタとはインスタンスが作成される時に自動的に呼び出されるメソッドです。インスタンス作成時に初期化処理が必要な場合などは、コンストラクタ内に記述しておけば自動的に実行することができます。

コンストラクタの定義

メソッド名の部分を”__construct”とすることでコンストラクタを定義することができます。

PHP
public function __construct(引数名){
  // 処理内容
}

下記例を参考に具体的な使用方法を確認していきましょう。

PHP
class Man //Manクラスを定義
{
  protected  $name; //変数nameを定義
  function __construct(){ //コンストラクタの定義
    $this->name = "なまえ"; //コンストラクタの処理としてname変数に”なまえ”を入れる。
  }
  function show() { //showメソッドの定義
    echo $this->name; //showメソッドの処理としてname変数を出力
  }
}

$man = new Man(); //Manクラスのインスタンスを作成
echo $man->show(); //Manクラスのshowメソッドを使用

出力結果

PHP
なまえ

コンストラクタを用いることによって変数nameの初期値に”なまえ”を代入することができております。このようにクラスのインスタンス作成時に初期値として入れておきたいものがある際に用いることが多いです。

アクセス修飾子

アクセス修飾子とはメンバ変数(クラスで使用するために、クラス内で定義される変数)やメソッドにどこからアクセスできるかを指定するものです。指定には「public」「private」「protected」の3つのどれかを指定します。

・public-クラス内、クラス外のどこからでもアクセス可能
・private-同じクラス内からのみアクセス可能
・protected-同じクラス、及び子クラスからアクセス可能
PHP
class Man //Manクラスを定義
{
  public $name = 'なまえ'; //publicで変数nameを定義
  function show() { //showメソッドの定義
    echo $this->name; //showメソッドの処理としてname変数を出力
  }
}

$man = new Man(); //Manクラスのインスタンスを作成
echo $man->name; //Manクラスのname変数を参照

出力結果

PHP
なまえ

publicで変数を定義するとクラス外でも呼び出しができます。

privateもしくはprotectedで定義すると、クラス外で用いることはできません。
先ほどのコードのメンバ変数 $name のアクセス修飾子を private に変更すると出力結果が変わります。

PHP
class Man //Manクラスを定義
{
  private $name = 'なまえ'; //publicで変数nameを定義
  function show() { //showメソッドの定義
    echo $this->name; //showメソッドの処理としてname変数を出力
  }
}

$man = new Man(); //Manクラスのインスタンスを作成
echo $man->name; //Manクラスのname変数を参照

出力結果

PHP
PHP Fatal error:  Uncaught Error: Cannot access private property Man::$name

例題

以下コードの出力値はどれか

PHP
class Man //Manクラスを定義
{
  protected  $name; //変数nameを定義
  protected  $address;
  function __construct(){ //コンストラクタの定義
    $this->name = 'なまえ'; //コンストラクタの処理としてname変数に”なまえ”を入れる。
    $this->address = '東京';
  }
  function show() { //showメソッドの定義
    echo $this->address; //showメソッドの処理としてname変数を出力
  }
}

$man = new Man(); //Manクラスのインスタンスを作成
echo $man->show(); //Manクラスのshowメソッドを使用
  1. なまえ
  2. 東京
  3. なまえ東京
  4. PHP Fatal error: Uncaught Error: Cannot access private property Man::$address
回答

2. 東京
manクラスのインスタンスに対してshowメソッドを用いており、showメソッドはアドレスを出力しているため

---