クラスとオブジェクト(PerfectPHP5章の勉強)
■クラスの定義
class MyModule_Controller{}
■インスタンスの生成と使い方
class Employee {
public function work(){
echo '書類を整理しています';
}
}
$yamada = new Employee();
$yamada->work(); //書類を整理しています と表示される。
$suzuki = $yamada; //こうするとsuzukiもEmployeeオブジェクトを参照する。
$suzuki = clone $yamada; //こうすると参照ではなく、複製になる。
※この場合はEmployeeは参照するが、あくまで複製したEmployeeを参照するので、
$suzukiにした変更は$yamadaには影響しない。
■アクセス修飾子
どこからメソッドやプロパティにアクセス可能か。
public クラスの外側から呼び出し、参照可能。
private 自分のクラスの内側からのみ呼び出し、参照可能。
protected 自分のクラスの内側、または自分のクラスを継承したクラスの内側からのみ
呼び出し、参照可能。
■プロパティ
class Employee {
public $name; //従業員の名前を表すプロパティ
public $state = '働いてる'; //従業員の状態を表すプロパティ
public function work(){
echo '書類を整理しています';
}
}
$yamada = new Employee();
$yamada->name = '山田';
echo $yamada->state, $yamada->name, 'さん';
$yamada->work();
■$this
自分自身のオブジェクトの参照。
クラス内で例えば $this->state = $state;とかって書く。つまり$はつけない。
■クラス定義時に宣言しないプロパティ
非推奨だが、下記はエラーにならない。
$yamada = new Employee();
$yamada->job = 'プログラマ';
こうするとpublic $job;のプロパティが自動で作成されるが、
混乱を招くため非推奨。
■staticプロパティ
インスタンス化されてなくても読み書き可能なプロパティ。静的。
共通の変数みたいな。
使い方例
class Employee {
public static $company = ' あいうえお会社';
}
echo 'みんな', Employee::$company , 'に勤めてます';
■self
そのクラス自身を指す。
class Employee {
public static $company = ' あいうえお会社';
public function getCompany(){
return self::$company; //Employee::$companyと同義
}
}
■クラス定数、コンストラクトの説明
クラス定数に$はいらない。const ●●で定義する。
class Employee{
const PARTTIME = 0x01 //アルバイト これがクラス定数。
const REGULAR = 0x02 //正社員 これもクラス定数。
private $name;
private $type;
public function __construct($name, $type){ //これがコンストラクト。
$this->name = $name;
$this->type = $type;
}
}
Employee::PARTTIME //クラスの定数を取得。
$yamada = new Employee('山田' , Employee::REGULAR);
■継承
PHPでは多重継承はだめ。
■オーバーライド
親クラスのメソッドやプロパティを
子クラスで定義すると上書きできる。
※引数が違うとエラーだが、デフォルト値を設定するのはOK
■parent
selfと同じ使い方。
例
class Programmer extends Employee{
public function __construct($name,$type){
parent::__construct($name,$type); //親クラスのコンストラクタ呼び出し
......Programmer特有の処理....
■finalキーワード
つけておくと継承された派生クラスでオーバーライドできなくなる。派生クラスでオーバーライドしたらエラーになる。
■標準クラスとキャスト
stdClass
プロパティやメソッドを一切持たない標準クラス。
例
$obj=new stdClass(); //空のクラスを初期化
$obj->some_member=1; //プロパティに値を代入(初期化)
ここまできたけどちょっととばそう