[PHP-users 35113] Re: 抽象メソッドの引数を可変長にしたい

Yuya Takeyama sign.of.the.wolf.pentagram @ gmail.com
2010年 4月 17日 (土) 22:14:15 JST


御返答ありがとうございます。

(2010年04月17日 21:34), php-users @ itcom.jp wrote:
>> 1. 抽象メソッドの引数を可変長にするにはどうすればよいか
>>     
> 「php 可変長引数リスト」で検索してみてください。
>   

fung_get_args 関数については一応理解しているつもいです。
ただ、今私が書こうとしているコードでは、問題が起こります。

public function execute()
{
$args = func_get_args();
for ($i = 0; $i < 3; $i++)
{
$result = call_user_func_array(array($this, 'process'), $args);
}
}

abstract protected function process();

上記のコードは、「どんな処理もリトライする」ための抽象クラスです。
(簡略化しています)
これを継承し、リトライしたい処理を process() メソッドに定義して使います。

execute() メソッドは process() メソッドを 3 回繰り返します。
その際、execute() メソッドが受け取った引数をそのままの形で process() メ
ソッドに渡したいので、
call_user_func_array() を使っております。

process() メソッドでも、call_user_func() を使って実装すればできるとは思
うのですが、
何となくスマートでないような気がしています。

>> 2. そもそも上記のエラーは、「引数の個数が違うから発生した」という認識で
>> 正しいのか
>>     
> 定義と実装が違うということですよね。
>   

「引数の個数」も「定義」に含まれるということですよね。


難しそうであれば、「抽象メソッドを定義しない」という方法を取ることもでき
ますが、
もし何か方法があるのであれば、知りたいと思っている次第です。

引き続き、よろしくお願いします。

Yuya Takeyama


PHP-users メーリングリストの案内