PHPオブジェクト指向基礎
主にVBとの違いをまとめる。コンストラクタ
書式:class クラス名 { public function __construct(引数) { : } }
メンバー変数へのアクセス
$this->メンバー名
$self::メンバー名
継承
継承も使えるclass クラス名 extends 親クラス名
オーバーライド
特に指定なし。親クラスと同じメソッド名を付ければよい。親クラスのメソッドを呼び出す
parent::メソッド名()
ちなみに ::(ダブルコロン)を「スコープ定義演算子」と呼ぶ。
(参考) PHPを愛する試み 〜self:: parent:: static:: および遅延静的束縛〜 - maeharinの日記
静的メンバ
staticを付加する。シングルトン
PHPに限る話ではないが、Singletonパターンというものがある。静的メンバはシングルトンに使える。
(参考) Singleton パターン - Wikipedia
→ Singleton パターンとは、そのクラスのインスタンスが1つしか生成されないことを保証するデザインパターンのこと
定数とクラス定数
PHPでの定数定義はdefine(定数名, 値)
クラス定数の定義は
const 定数名 = 値
クラス定数にアクセスするには、
クラス外からは
クラス名::定数名
クラス内からは
self::定数名
抽象クラス
abstract class 抽象クラス名 { abstract public function 抽象メソッド名(); }
インターフェイス
interface インターフェースクラス名
インターフェースを実装するには
class クラス名 implements インターフェースクラス名
多重継承・多重実装
多重継承はできない。多重実装はできる。
多重実装するには、
class クラス名 implements インターフェースクラス名1, インターフェースクラス名2, …
タイプヒンティング
引数の前にクラス名を書くと、そのクラス以外は受け付けなくなる。public function メソッド名(クラス名 引数)
引数のクラスはインターフェースクラスを指定することも可能。
そうすればポリモーフィズムが実現可能となる。
例外処理
例外の発生throw new Exception(メッセージ)
例外のキャッチ
try { : } catch (Exception $e) { 例外処理 }
名前空間
PHP5.3から名前空間が使えるようになる。書式1:
namespace 名前空間名; class クラス名 { : }
クラスを利用する場合は、
フルパスで指定する場合:
$オブジェクト = new \名前空間名\クラス名();
あらかじめ利用宣言する場合:
use 名前空間名; $オブジェクト = new クラス名();
別名も指定可
use 名前空間名 as 別名
名前空間を指定しない場合はグローバル空間となる。
名前空間を指定しない場合、以下の2行は同じ意味。
throw new Exception('hogehoge'); throw new \Exception('hogehoge');
注意点
(例)
namespace My; class Hoge { try { } catch (Exception $e) { } }
spl_autoload_register
指定した関数を __autoload() の実装として登録する未定義関数が呼び出されたタイミングでspl_autoload_registerで登録したメソッドが呼び出される。
呼び出し先にrequire_onceを実行すれば各ファイルでrequire_onceする必要が無い?
0 件のコメント:
コメントを投稿