2011-07-28 8 views
2

私は本当に簡単なPHP質問をしました。動的PHP子クラス名

には、以下のことが可能です:

$foo = 'bar'; 
Class $foo extends Object 
{ 
... 
} 

私はOOPの開発者は、私が達成したいかについてのアイデアを持っていると信じています。どのようなヒントもありがとうございます。

更新:スクリプトのファイル名を独自のクラス名にしたい場合があります(もちろん、衝突を最小限に抑えるためにクラス名に接頭辞を付ける必要があります)。また... eval()を使用しないで。 class_alias

$cls = 'MyCls' . basename(__FILE__); 
Class $cls extends Object 
{ 
... 
} 
+7

私はOOPデベロッパーですので、何をしようとしているのか分かりません。あなたが示すものは不可能です。質問を明確にすると、あなたがしようとしていることを達成するのを手助けすることができるかもしれません。 – Gordon

+1

@Gordon - 'eval(" class $ foo extends Object {}) ";不可能ではないが、地獄のように醜い。そして私はこれが@アレーン・カピリのためのものであるかどうかを知りません。 – Yoshi

+6

私はなぜ誰かが動的なクラス名を持ちたいと思っているのか分かりません。もしあなたが間違った方法で解決しようとするよりも、あなたが持っている問題を提示しなければならないかもしれません。 –

答えて

0

私はあなたの特定の要件が何であるか分かりませんが、あなたはそれについて間違った方向に行っていると思います。ファイル名に基づいてクラス名を作成しようとするのではなく、好きなクラスをロードするのに__autolod()を使用しないと、コードでそのクラスを見つける方法がわかりません。

+0

オートロード機能に関するヒントをありがとう。私は今日までそれについて知らなかった。 –

3

ルック:私は、コードを書かれているはずです。最初に、必要に応じてObjectを拡張する固定名のクラスを作成します。次に、動的エイリアスを作成します。

5

あなたが何かのように行うことができます:

// First define the Object class 
class Object 
{ 
} 

// This will be the template class 
$classDef = <<<TEXT 
Class __MY_CLASS_NAME__ extends Object 
{ 
} 
TEXT; 

// This will generate a class based on the given template 
function generateClass($name, $classDef) 
{ 
    eval(str_replace('__MY_CLASS_NAME__', $name, $classDef)); 
} 

// Now use it altogether 
generateClass('Something', $classDef); 
$a = new Something; 
var_dump($a); 

編集:私はあなたが何をしたいのかを知っていると確か醜いですが、...そこに行くいけない。他の人のコメントに同意する。..