チェ・ゲバムラの日記

脱犬の道を目指す男のブログ

クラスとオブジェクト(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;  //プロパティに値を代入(初期化)

 

ここまできたけどちょっととばそう