※ 引述《gsklee ()》之銘言:
: 我有三個functions如下:
: 因為很明顯的可以看到大部分的程式碼都是重複的,
: 所以我想把它們整併成單一一個程式碼區塊,
: 但是卻不得其解。
: 我有試過variable function的概念,
: 但似乎無法應用在這個情況下:
: $lolz = array('int_register', 'string_register', 'array_register');
: foreach ($lolz as $lol) {
: function $lol() {
: [DEFINITIONS]
: }
: }
: 我知道如果改寫成這樣的話事情會變得很簡單:
: function register($flag) {
: switch ($flag) {
: case "int":
: [DEFINITION]
: }
: }
: 但是基於既定coding style的理由沒有辦法優先考慮以上選項,
: 所以想請教一下各位,
: 不知是否還有其他寫法,
: 可以達成簡併這三段程式碼的目標呢?
: 謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.250.147.33
你應該用的是template pattern,而不是把interface破壞掉。
以下是php5合法的寫法
function register($functor){
$num_args = func_num_args();
for ($i = 0; $i < $num_args; $i ++) {
$parameter = func_get_arg($i);
if (isset($_REQUEST[$parameter])) {
global $$parameter;
$$parameter = $functor($_REQUEST[$parameter]);
}
}
}
function functor_int($arg){ ...... }
function functor_string($arg){ ...... }
function functor_array($arg){ ....... }
呼叫就用
register(1, 'functor_int');
register('aaa', 'functor_string');
.....