2011-02-02 5 views
0

コントローラでクラスを宣言し、クラスのポインタを渡さずにモデルで使用したい場合、 "致命的なエラー:クラスが既に宣言されています" ? get_declared_classes()関数を使用すると、クラスが宣言されていることがわかりますが、モデルで使用できるようにそのクラスへのポインタを取得するにはどうすればよいですか?PHPでクラスのポインタを取得する方法

基本的に、宣言されているがポインタを持たないクラスを使用するにはどうすればよいですか。

ご協力いただければ幸いです。

ありがとうございます!

EDIT:「ポインタ」という単語が誤用されている可能性があります。ここにいくつかのコードがあります

// Controller...one file 
$class = new Class(); 
$model = $this->load_model('example.php'); 
$model->dosomething(); 

// Model...example.php 
function dosomething() { 
    // I want to access the class here. Is it only possible to do this by 
    // passing a $class parameter to the function or can I do it without 
    // passing it as a variable? 
} 
+3

"クラスポインタ"とはどういう意味ですか? PHPには "クラスポインタ"という概念はなく、インスタンスポインタ/参照のみがあります。疑似PHPコードの例は? – BoltClock

+0

あなたはそのクラスで何をしたいのですか? '$ class = new Classname();'をインスタンス化したいだけなら? –

+0

1つの言語セットの概念は必ずしも別の言語に固執できるとは限りません。 – Orbling

答えて

4

私はあなたが用語を混ぜていると思います。 PHPのどこにでもポインタの概念はありません。参照も同様の概念ですが、それは別のトピックです。

あなたがしようとしていることは、変数を使用してモデルのクラスを示すことです。だから、あなたは文字列を使うことができます。それでは、あなたがクラスFooを使用するようにモデルを伝えたいとしましょう、あなたがモデルにクラス名を挿入できます。

$model = new Model('foo'); 

その後、コンストラクタ内:

public function __construct($class) { 
    $this->className = $class; 
} 

次に、あなたがしたいときnew

$class = $this->className; 
$obj = new $class(); 

ただし、オブジェクトスコープとは関係ありません。だからあなたはどこでもそれを行うことができます:

$class = 'Foo'; 
$obj = new $class; 
関連する問題