[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 メーリングリストの案内