人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP5で__GETメソッドを使って下記のように動的にクラスを読み込みたいのですが、
__autoloadを使う場合と比べて、考えられるメリット・デメリットがありましたら教えてください

class Hoge {
function hogehoge() {
$this->Class->method(); // 存在しないプロパティのため__getが実行される
}
function __get($class) {
include $class . '.php';
$this->$class = new $class;
return $this->$class;
}
}

●質問者: xxmasaxx
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Class hoge PHP クラス デメリット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Kenz
●70ポイント ベストアンサー

考えられるデメリットとして、

後から見たときにそれがインスタンスを生成しているのか、

内部メソッドを呼び出しているのか見えにくくなります。

$this->Class;が

Classクラスを作成しているのか、内部のClassプロパティのmethodメソッドをコールしているのかを判断するには

HogeクラスのプロパティにClassが存在しないかどうかを全てチェックする必要があります。

それはつまり、HogeクラスにはClassプロパティを作成できないという事にもなります。

加えてコンストラクタにパラメータを設定できない。

__getメソッドを全てのクラスに読み込む必要がある。

スレッドセーフじゃない

などが考えられますがいかがでしょう?

◎質問者からの返答

動的に読み込むクラス名は名前の末尾に「○○Class」をつけ、

それ以外は内部メソッド名とするなど規則性を持たせて名前の衝突を回避するとか方法はありそうですが、スレッドセーフじゃないというのは確かに痛いかもですね。思わぬところで予想外の動作をする可能性はありそうです。

参考になります。回答有り難うございました。


2 ● hijk05
●0ポイント

http://www.ecoop.net/memo/2007-03-16-1.html

◎質問者からの返答

失礼ながら上記URLの意図が分からないのですが。。

__autoloadの使い方は理解しているつもりです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ