この記事の所要時間: 約 0分42秒
引数が多い時に困るのはみんな一緒ですね。
C++とかJavaで良く見るプログラミングスタイルだが、こうやってひたすら数字だけが並んでいるとやたらと読みにくい。三日後に見たらどのパラメーターが何なのかが思い出せなくて、コンストラクターのソースコードを参照せねばならない。
Life is beautiful: 「パラメーターのプロパティ渡し」でプログラムを読みやすくする、というアイデアはどうだろう
PHPのコンストラクタを名前付き引数で呼ぶアイデアはid:shimookaさんが書かれているので、ここでは通常のメソッドについて考えてみました。
いまいちなコードですが、引数省略時のデフォルト値、存在しない引数名が来た時・必須引数が無い場合に例外を投げるようにしてます。
PHP:
-
<?php
-
class IllegalArgumentException extends Exception {}
-
-
class Hoge {
-
$v = $params[$key];
-
return $v;
-
} else {
-
if ($isMust) {
-
throw new IllegalArgumentException();
-
} else {
-
return $default;
-
}
-
}
-
}
-
}
-
-
class Foo extends Hoge {
-
$id = $this->getParam($params, 'id', true);
-
$name = $this->getParam($params, 'name', false, 'NO NAME');
-
throw new IllegalArgumentException();
-
}
-
-
}
-
}
-
-
$obj = new Foo();
-
// id=1 name=hoge
-
// id=1 name=NO NAME
-
// Uncaught exception 'IllegalArgumentException'
-
$obj->func1();
-
// Uncaught exception 'IllegalArgumentException'
引数定義をメソッド宣言とは別に持つのはいまいちですね、はい。
ちなみにPythonは言語としてこの機能をサポートしているようです(via: odz buffer)。あとVBも同じような機能があります(via: 位置と名前による引数渡し)。
- Newer: Ruby on Rails vs PHP?
- Older: PHPを今まさに使っている(学んでいる)人へ
トラックバック:0
- このエントリーのトラックバックURL
- http://www.1x1.jp/blog/2007/05/php_argument.html/trackback
- Listed below are links to weblogs that reference
- 引数を名前で渡す from Shin x blog
