アクセス修飾子の紹介
public -> 外部からアクセスできる修飾子
protected -> そのクラス内、又は継承先のクラス内でアクセスできる修飾子
private -> そのクラス内のみでアクセスできる修飾子
static -> インスタンスを生成せず、外部からアクセスできる。
前置き
アクセス修飾子をつけていない場合はpublicになります。
publicの意味は「公の」や「公共の」や「表立った」などの意味があります。
class内でpublicのフィールドを宣言するべきではありません。
具体例をあげて紹介
前に紹介したPaginationクラスを例にあげて説明します。
class Pagination { /* 1ページに表示する最大件数 */ private $max_view = null; }
こちらでは、privateでフィールドを宣言しています。
publicで宣言してしまうと
class Pagination { /* 1ページに表示する最大件数 */ public $max_view = null; } $pagination = new Pagination(); $pagination->max_view = "string"; //数字ではない値を入れられる
paginationクラスのmax_viewは数字を入れるために定義されています。
直接クラスのフィールドに値をいれると値のチェックができません。
後々に値チェックのメソッドを定義することもできますが、その都度、チェックメソッドをコールしなくてはいけなくなります。
では、どうすれば良いのか?
class Pagination { /* 1ページに表示する最大件数 */ private $max_view = null; public function set_max_view( $max_view ){ if( intval($max_view) ){ //$max_viewが数字の時 $this->max_view = $max_view; }else{ //$max_viewが数字ではない時 throw new Exception("数字ではありません"); //例外を意図的に投げる } } }
アクセス修飾子を記述する訳
開発は基本的に複数人でやるものです。意図しない値が入ってはいけないため、アクセス制限を設ける必要があります。
先程も書きましたが、フィールドは値をチェックできません。
そのため、フィールドは
そのクラス内のみで使うのであればprivate
継承先でも使いたいのであればpretected にした方が良いと思います。
フィールドに値をセットしたい時は関数にします。
set_max_view()のような感じです。
定義したフィールドが外部からの値を引数に渡す際はpublic
クラス内の値を引数に渡す際はprivate
関数にすると多少の変更があっても、引数と返り値が一緒ならば関数の中身はなんだって良いのです。
static修飾子
インスタンスを生成せずにメソッドを呼べるので便利ですね。
わたし的にstaticはあまり多用するべきではないと思っています。
多用しているとなんのためのアクセス修飾子なのかわからなくなってくるからです。
私がstaticを使っている例として
class Debug { /* 配列の表示 @param array $array */ public static function echo_r( $array ){ echo "<pre>"; print_r( $array ); echo "</pre>"; } /* 読み込みファイルの表示 */ public static function include_file_echo(){ self::echo_r( get_included_files() ); } }
わざわざインスタンスを生成するまでもないだろうし、使い回しもしたい時にクラス化してファイルごとコピーして多用しています。
|