PHP - OOP - 4. アクセス権
続いてプロパティやメソッドを修飾するアクセス権について取り上げます。
アクセス権の記述
アクセス権とはプロパティやメソッドを修飾するキーワードで、外部のPHPプログラムからアクセス可能かどうかを決定するものです。
図に示しているように プロパティやメソッドのアクセス権に private
を指定するとクラスの外部のPHPプログラムから直接アクセスできなくなります。
ここでは以前に作成している MyClass.php
ファイルを確認してみましょう。
<?php
class MyClass
{
public $myProperty;
public function myMethod($x)
{
echo $this->myProperty . " " . $x;
}
}
上記の MyClass
クラスであれば $myProperty
プロパティと myMethod
メソッドには public
というアクセス権を指定してます。この public
というアクセス権は外部のPHPプログラムからアクセス可能であることを意味します。
PHPで利用可能なアクセス権には以下の3種類があります。
アクセス権 | 意味 |
---|---|
public | どこからでもアクセス可能 |
protected | そのクラス自身、そのクラスを継承したクラス (および親クラス)からのみアクセス可能 |
private | そのクラス自身からのみアクセス可能 |
もし先ほどのプログラムの $myProperty
プロパティのアクセス権に private
を指定すると以下のプログラム( my_class_runner.php
)は実行できなくなります。
<?php
require_once("MyClass.php");
$myClass = new MyClass();
$myClass->myProperty = "Hello"; #=> Fatal error
このように private
や protected
といったキーワードを指定することで外部のPHPプログラムからのアクセスを禁止できます。
どのアクセス権を選ぶかは開発するプログラムの要件によって決まります。一般的には、プログラムの保守性を高めるためにアクセス権はなるべく狭くしておきます。
public
キーワードの利用は必要最低限にとどめておくと良いでしょう。
PHPプログラムの開発(アクセス権の変更)
計算機プログラムの例題に戻りましょう。ここでは簡単な計算機クラス( SimpleCalc
クラス)に定義済みの $number
プロパティについて、アクセス権を public
から private
に変更してみましょう。
<?php
class SimpleCalc
{
private $number;
public function add($x)
{
$this->number = $this->number + $x;
}
public function show()
{
echo $this->number . PHP_EOL;
}
}
また実行プログラム( calc_runner.php
)は前回と同じものを利用しましょう。
<?php
require_once("SimpleCalc.php");
$calc = new SimpleCalc();
$calc->number = 10;
$calc->add(20);
$calc->add(30);
$calc->show();
プログラムを実行すると次のようなエラー( Fatal error
)が出力されます。
$ php calc_runner.php
Fatal error: Uncaught Error: Cannot access private property SimpleCalc::$number in /home/ec2-user/environment-db/calc_runner.php:6
Stack trace:
#0 {main}
thrown in /home/ec2-user/environment-db/calc_runner.php on line 6
このように SimpleCalc
クラスの $number
プロパティのアクセス権を private
に変更したことで、外部のPHPプログラムから $calc->number = 10;
を実行するとエラーになります。
まとめ
- プロパティやメソッドにアクセス権を定義できる
- アクセス権には
public
、protected
、privage
の3つがある - アクセス権によって外部のプログラムからプロパティやメソッドへのアクセスを制限できる