特定のメソッドの前後で実行する必要のあるロジックを持つベースクラスを指定すると、異なる派生クラスで大きく異なるパラメータが使用されます。PHPでのフックメソッドの実行
abstract class Base{
public function pre(){ print "Runing Base::pre()\n"; }
public function pos(){ print "Runing Base::post()\n"; }
abstract public function doIt();
}
class Cheating extends Base
{
public function doIt(){
$this->pre();
print "Doing it the cheating way\n";
$this->pos();
}
}
しかし、私は実際にやってみたいのラインに沿っている:
class Alpha extends Base
{
public function doIt($x, $y){
print "Doing it in Alpha with x=$x, y=$y";
}
}
class Beta extends Base
{
public function doIt($z){
print "Doing it in Alpha with z=$z";
}
}
、常に前とPOSメソッドを実行するためのいくつかの方法を持っている、しなくても、一例として、 doItメソッド自体を変更してください。
明白な方法、のdoItは、ベースのすべての派生全体で均質でなければならないようなものになるだろう:
abstract class Base
{
public function pre(){ print "Runing Base::pre()\n"; }
public function pos(){ print "Runing Base::post()\n"; }
public function process($a,$b){
$this->pre();
$this->doIt($a,$b);
$this->pos();
}
abstract public function doIt();
}
class Wishful extends Base
{
public function doIt($a, $b){
print "Doing it the Wishful way with a=$a, b=$b\n";
}
}
問題、我々はのdoItの各実装上のパラメータの異なる数と種類を持っているので、それはそれは、そこにあります実際に問題を解決するものではありません。
「フック」の場合と同じように聞こえますが、どのようにそれらを実装するのでしょうか?または、問題を解決するための他のまともな方法...私はちょうど欠けている簡単な方法があるはずだと思う - おそらく間違ったものを円で考える。
ありがとうございます! http://php.net/manual/en/function.call-user-func-array.php:で行うことができ、可変引数を指定して呼び出す
function process()
{
$this->pre();
$result = call_user_func_array(array($this, 'doIt'), func_get_args());
$this->post();
return $result;
}
あなたの方法はプライベート作ると – datasage