PHP クラス・メソッド・変数の使い方 アクセス修飾子について

アクセス修飾子
2014/02/21

オブジェクト指向の基本

クラス

クラスとは、関数の集合体です。
一定の規則に従い、種類ごとにクラスを定義します。

関数の集合体と言いましたが、データの扱い方が全くことなります。
関数は、与えられた値を処理して返すなどの処理を行うのみですが、クラス(オブジェクト)では自分自身の中にデータを格納しておきます。

オブジェクトとは、クラスをコピーしたものを指します。
クラスを元に作業用のオブジェクトを生成し、データを格納したり処理を行うのです。
一つのクラスから複数のオブジェクトを生成することが可能で、これによりデータの不整合を回避します。
このようにクラスを元にオブジェクトを生成することをインスタンス化すると言います。

もし、インスタンス化せずに使用すると、1つのクラスを複数同時に実行した場合、データが上書きされて意図しない値が返されちゃいますからね。

メソッド

メソッドとは、クラス内に定義して処理を行う部分です。
例として、testというメソッドを作成します。


class hoge {
	public function test() {
		echo "test";
	}
}

上記のtestメソッドを他のクラスから呼び出すには、インスタンス化して使用します。


$hogeClass = new hoge();
$hogeClass->test();

このように new してインスタンス化することで初めて使用できるようになるのです。

ちなみに同じクラス内から呼び出す場合は「$this->メソッド名();」として使用します。

メソッド・変数の定義

アクセス修飾子

アクセス修飾子は、クラスの中で使用するメンバ変数やメンバメソッドを宣言する際に使用します。
PHPでは、「public」「private」「protected」の3種類あり、適切に設定する必要があります。

基本は以下のようにして記述します。


class クラス名{
	アクセス修飾子名 メンバ変数名;

	アクセス修飾子名 function メンバメソッド名(){
		処理;
	}
}

アクセス修飾子は、参照できる範囲を決めるためのもので、それぞれ以下のようになっています。

アクセス修飾子範囲
publicクラス内、クラス外のどこからでもアクセス可能
private同じクラス内からのみアクセス可能
protected同じクラス、及び子クラスからアクセス可能

protectedは継承したときに関わってきます。
全部publicでも処理は問題なく動きますが、これらの宣言を適切に行うことで、バグを抑える・分かりやすいコードになるなどのメリットがあります。

静的メソッド

メソッド定義の先頭にstaticを記述することで静的メソッドとなります。
静的メソッドとは、与えられた値を処理して返すだけなど、クラス内でデータを格納する必要が無い場合に定義します。

通常のクラスを利用するにはインスタンス化する必要があると言いましたが、このstaticメソッドは例外としてインスタンス化せずに使用します。
そもそも、データを保持しないのでインスタンス化する必要はないですね。


class hoge {
	public static function test() {
		echo "test";
	}
}

これらを呼びだすときは、「::」演算子を使用します。


hoge::test();

このように簡単に呼び出すことができます。
同じクラス内から呼び出すときに「$this」は使えません。
self::メソッド名として使用します。

クラス定数

名前の通り、クラス内で使用する定数を定義します。
static変数同様にインスタンス化は行いません。


class hoge {
	const name = "hoge";
}

これらを呼びだすときは、「::」演算子を使用します。


echo hoge::name;

特定のクラスでのみ使用する定数をconstで宣言することで分かりコードを記述できます。

  • このエントリーをはてなブックマークに追加
Related

PHPで動画の撮影日を取得

PHPで動画の撮影日を取得 概要 PHPからffprobeコマンドを実行し、動画の撮影日時を取得します。 コード $posted_at = ...

FullCalendarでGoogleカレンダーのようなUIを実装

jQueryプラグインFullCalendarのサンプル 概要 FullCalendarを使用して、GoogleカレンダーのようなUIを実装する使用例を...

PHP Laravel5.2でmulti-auth(複数テーブルでの認証)を実装

Laravel5.2でマルチ認証 概要 LaravelとはPHPの中で今最も伸びているフレームワークです。 処理速度が遅いなどありますが、かなり使い安く拡...

PHP 正規表現でIPアドレス形式の文字列か判定

正規表現でIPアドレスの入力チェック 概要 フォームで入力されたIPアドレスが正当な文字列か判定するためのバリデーション処理を実装します。 基本的...

rbenv環境でRuby on Railsのアプリケーションを一瞬で自動生成

アプリケーション構築時に最初に行う手順 概要 アプリケーションを作成するまでの手順を記載しています。 rbenvなどの環境が設定済と仮定して話を進めま...

Rails devise・authority・rolifyで権限付きの認証機能

devise・authority・rolify 概要 3つのGemを使用して、権限付き認証機能を実装します。 gem インストール Gemfile ...
トップへ戻る