1

私は自家製のMVCシステムを使用しています。このシステムでは、ビューがメソッドのコンテキスト内にあることでモデルにアクセスするため、にアクセスできます$this

動的に含まれるビューの例:

...
<div>
   Hello <?= $this->user->name ?>
</div>
...

これで、いくつかの追加パラメーターを使用して、関数に因数分解したいコードがいくつかあります。例えば ​​:

function colored_hello($color) {
?>
<div style="background-color:<?= $color ?>">
   Hello <?= $this->user->name ?>
</div>
<?
}

$this問題は、関数がメソッドではないため、にアクセスできないことです。しかし、モデルやコントローラーをプレゼンテーションで台無しにしたくはありません。

ちなみに、この関数をメソッドとして動的に呼び出せるようにしたいと思います。アスペクト指向プログラミングのように:

# In the top view
magic_method_caller("colored_hello", $this, "blue")

出来ますか ?それとも、それを行うためのより良い方法を見ますか?

4

4 に答える 4

1

プロパティとして渡し$thisます。

于 2012-07-26T15:18:40.987 に答える
0

少しハックですが、 debug_backtrace() を使用して callers オブジェクトを取得できます。しかし、公開できるのは値だけだと思います:

function colored_hello($color) {
  $tmp=debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT);
  $last=array_pop($tmp);

  $caller = $last['object'];

  print_r($tmp);
  print_r($last);
  print_r($caller);

  ?>
  <div style="background-color:<?= $color ?>">
     Hello <?= $caller->user->name ?>
  </div>
  <?
}

(コードは testet ではありませんが、ヒントが得られます :-) )

于 2012-07-26T15:06:30.123 に答える