0

内でメソッドを作成できるようにしたい__construct

次のようにラムダを使ってみました

// This is what I am trying to achieve as an end result
class A extends Z{
    public function __construct() {
        parent::__construct()
    }

    public function myfunc() { // do something }
}


// This was an attempt to implement it
class A extends Z{
    public function __construct() {
        //example
        if ($something_is_true) {
            $this->myfunc = function () {}
        }
        parent::__construct()
    }
}

これが私が達成しようとしていることを説明することを願っています

編集

関数にマップされたURLがあり、クラスに存在するURLマップ関数を判別するためのロジックが必要です。

4

2 に答える 2

2

それが可能だとは思わないでください。しかし、クラス内でメソッドを動的に「作成」する別の方法は、magic __call()メソッドを使用することです。

このメソッドを実装すると、オブジェクトに存在しないメソッドを呼び出そうとすると、代わりに__call()メソッドが呼び出されます。渡される最初のパラメーターはユーザーが呼び出した関数の名前になり、2番目のパラメーターは引数になります。

詳細については、マニュアルを参照してください。

于 2013-01-24T03:44:15.753 に答える
0

クラスが定義されると、標準のPHPを使用してそのクラスに新しいメソッドを追加することはできません。__callも使用することをお勧めしますが、変数変数の使用に問題がない場合は、create_functionを使用して関数の内容を動的に作成することで、必要なことを実行することもできます。

<?php

class A
{
    public function __construct()
    {
        $this->addUpEchoAndReturn=create_function('$a,$b','$c=$a+$b;echo "$a+$b=$c<hr />";return $c;');
    }
    public function add_up_and_echo($a,$b,$c,$d)
    {
        $fn=$this->addUpEchoAndReturn;
        return $fn($fn($a, $b),$fn($c, $d));
    }
}


$x=new A();
$result=$x->add_up_and_echo(3,4,5,25);
echo "<hr /><hr />Final Result: $result";
?>
于 2013-01-24T04:33:51.587 に答える