phpの覚書

phpの覚え書きを書き溜めていくサイトです

PHP全般

クラスの定義とインスタンス化

投稿日:

クラスの定義とインスタンス化

PHPでクラスを定義する時はclassキーワードを使って「class クラス名 { プロパティとかメソッドとか・・・ }」という感じ

定義したクラスをインスタンス化する時も「$変数名 = new クラス名(パラメータ);」という感じで、他の言語でもよくあるパターン

インスタンスのプロパティへ参照は「$変数名->プロパティ名」、メソッドは「$変数名->メソッド名(引数)」で実行出来る。

小クラスへの継承

一般的な言語と同様に小クラスへ継承する機能も完備^^。書式は「class 子クラス名 extends 親クラス名 { 小クラスのプロパティとかメソッドとか・・・ }」

// クラスの定義(親)
class ClsSampleDog{
  	//プロパティ
	public $br = "<br />";
	protected $name ;
  
	//コンストラクタ
  	function __construct($name){
		  $this->name = $name;
	}

	// アクセサメソッド(Get)
	function getName(){
		return $this->name;
	}
	// アクセサメソッド(Set)
	function setName($name){
		$this->name = $name;
	}

	// メソッド
	public function myName(){
		return	"My name is " . $this->getName();
	} 

	// メソッド
	public function bow(){
		return "bow bow ";
	} 

}

// 子クラスの定義(継承)
class ClsChildSampleDog extends ClsSampleDog{
	public function myName() {
		return "My name is " . $this->getName();
	}
}


// それぞれのクラスをインスタンス化
$sampleParent = new ClsSampleDog("Lucky");			// 親クラス
$sampleChild = new ClsChildSampleDog("Happy");		// 子クラス

// 親クラスのメソッドやプロパティ
echo $sampleParent->myName();		// Lucky
echo $sampleParent->br;				// <br />
echo $sampleParent->bow();			// bow bow 
echo $sampleParent->br;				// <br />
$sampleParent->setName("Lassie");	// $nameを上書き
echo $sampleParent->myName();		// Lassie
echo $sampleParent->br;				// <br />

// 子クラスのメソッドを実行
echo $sampleChild->myName();		// Happy
echo $sampleParent->br;				// <br /> (親子クラスのプロパティより)
echo $sampleChild->bow();			// bow bow (親クラスのメソッドより)
echo $sampleParent->br;				// <br /> (親子クラスのプロパティより)

新規開発のプログラムで使うことは少ないけれど、既存箇所に影響なく機能追加とかするときに継承を利用すると安心でかつ便利^^

配列でカプセル化したプロパティへのアクセスを便利に

クラスのプロパティをpublicにせずprivateとかでカプセル化する事でプロパティの思わぬ書き換えとか誤った値がセットされるトラブルを避ける意味がある。

その代わり、カプセル化したプロパティにアクセスするにはset~とかget~といったアクセサメソッドが必要になる訳だけど、数が多くなるとこのアクセサメソッドが大量に増えるのが何とも面倒^^;

折衷案として、privateな配列を用意して配列のキーと値を渡すsetメソッドとか使うと便利だったりします。キー項目に応じて値をチェックしたりという事も可能だし、違うキー項目でも同じチェック内容ならば一つにまとめられるので^^

class ClsSampleVar{
	// privateの配列でプロパティを定義
	private $var = [];
	public $br = "<br />";

	// アクセサメソッド(set)
    public function setVar($key,$value){
		// 配列にkeyと値をセット
        $this->var[$key] = $value;
    }

	// アクセサメソッド(Get)
    public function getVar($key,$default=null){
		// 配列に該当のKeyがあるかをチェック
		if(array_key_exists($key,$this->var)){
			// Keyがあればその値を返す
            return $this->var[$key];
        } else {
			// Keyがなければ初期値を返す
			return $default;
		}
	}
}

$var = new ClsSampleVar();		// インスタンス化
$var->setVar("apple",100);		// 配列にKeyと値をセット(apple)
$var->setVar("melon",200);		// 配列にKeyと値をセット(melon)
echo $var->getVar("apple");	// 100(配列からappleの値を取得)
echo $var->br;				// <br />
echo $var->getVar("melon",1234);	// 200(配列からmelonの値を取得)
echo $var->br;				// <br />
echo $var->getVar("mikan","???");	//  ???(Keyが存在しないので初期値が戻る)
echo $var->br;				// <br />

-PHP全般
-, , , ,

執筆者:

関連記事

no image

配列の定義・更新・参照・追加・ソート

配列の定義 PHPで配列を定義するには「array()」を使って変数に代入する方法と、変数に[ ]で直接代入する方法がある。 どちらの方法でも、キーなしの配列・キーありの連想配列それぞれ定義可能 // …

no image

クラスへのアクセス権

クラスへのアクセス権 クラス内のプロパティ・メソッドへのアクセス権の種類は、「public」と「protected」と「private」の3つ その名の通り「public」はクラスの外部からもアクセス …

no image

クラスモジュールのstaticプロパティとstaticメソッド

クラスモジュールのstaticプロパティとstaticメソッド staticの識別子を付けたプロパティやメソッドは通常の?(動的な)プロパティやメソッドとは使い方が異なり、インスタンス化せずに呼び出し …

no image

エスケープシーケンスと特殊文字

ダブルクォーテーションやシングルクォーテーションの文字列 PHPで文字列を扱う時はダブルクォーテーション「”」か、シングルクォーテーション「’」で文字列を囲む。 // 文字列は …

no image

スーパーグローバル変数・定数

スーパーグローバル変数・定数 スーパーグローバル変数やスーパーグローバル定数は、プログラム中のどこからでも参照可能な値。 スーパーグローバルに含まれる項目や値は、「$GLOBAL」を参照すると確認でき …