2012-01-28 22 views
2

メソッドから実際の呼び出しオブジェクトを取得する方法はありますか?PHPはメソッドの呼び出しオブジェクトを取得します

例えば、私はこのような何かをシナリオを持っている:

$user = new User; 
$user->setName('name'); 
$user->save($user); 

保存方法に$ユーザーを渡すと、それはちょうどそれが呼び出し元のオブジェクトの情報を取得しているといいだろう代わりに。

私はget_called_class()を実行できますが、実際のオブジェクトのデータは返されません。私はPHPのReflectionクラスも見ていましたが、まさに正しいものは見ませんでした。

アイデア?

ありがとうございます!

+2

'$ this'を使わないのはなぜですか?' setName'メソッドで使ったことは確かです – knittl

+0

私はこれを私のbで過度に複雑化したので雨。 – David

+0

実際には、思考プロセスをより正確に記述するため。 Userオブジェクトは、Modelオブジェクトを拡張します。これは、save()メソッドを持つDbオブジェクトを拡張します。 $ thisをDbオブジェクト内で使用することで、私が必要とするのはUserだけですが、実際にDb、Model、Userを取得しています。それは本当に重要ではありませんが、私が望んでいたほどきれいではありませんでした。 – David

答えて

2

(ひいてはsave機能自体の中から、あなたは、オブジェクト自体にアクセスするために$thisキーワードを利用することができます。instanceは、プライベートメンバ変数になる代わりに...

public static function getInstance() { 

    if(!self::$instance) { 
    self::$instance = new self(); 
    } 

    return self::$instance; 

} 

。作ります< ---これはすべてphp5を想定しています。

+0

パーフェクト、ありがとう! – David

+0

これはシングルトンパターンです。それは実際に手元の問題に役立っていますか? – knittl

-2

saveがクラスメソッドの場合はself-> save($ this)、saveがインスタンスメソッドの場合はsave($ this)を実行できます。

とにかく、この点は$ thisが現在のインスタンスを指しています。したがって、setNameはuserのインスタンスに対して作用するので、$ thisはsetName内のそのユーザーと等しくなければなりません。あなたのオブジェクト内の

+1

'$ this-> save()'が呼び出されているときに '$ this'は存在しないので、' $ user-> save($ this) 'を呼び出すことは意味がありません。 – FtDRbwLXw6

関連する問題