0

関数を param としてクラスに渡し、それをローカル クラスの var に割り当てる方法

これは私のシナリオですが、解決できますか?

<?php
class a {
  protected $var;

  function __construct($fun) {
    echo $fun('world'); // This is working perfect
    $this->var = $fun;
  }

  function checkit($x) {
    return $this->var($x);  // This is not working [ Call to undefined method a::var() ]
  }
}
$mth = 'mathm';
$cls = new a(&$mth);    // result [ hello (world) ]

echo $cls->checkit('universe');  // <- not working as it fail

function mathm($i) {
  return 'hello (' . $i . ')';
}
?>
4

2 に答える 2

0

ここで何か混乱していると思います。コードから、変数のアドレス(値として文字列 "mathm"を含む)のみをのコンストラクターに渡しますclass a。参照はインスタンス変数に保存されます$var(文字列値のまま)。次にcheckit()、値('mathm')を関数のように使用しようとしています。関数mathm()は問題なく存在しますが、スコープ内にはありませんclass a。したがってclass a、と呼ばれる関数の場所については何も知りませんmathm。したがって、エラー。

print_r($this->var);の中にコード行を挿入するcheckit()と、出力が関数や関数への参照ではなく、単純な文字列であることがわかります。

クロージャ、別名無名関数を使用して、関数を渡すことができます。または、関数を保持するクラスを作成し、mathmそのクラスのインスタンスを渡してクラスaで使用することもできます。

これがお役に立てば幸いです。

于 2012-12-17T15:00:04.757 に答える
0
return $this-var($x);

needs to be:

return $this->var($x);
于 2012-12-13T19:11:44.457 に答える