2011.12.20
PHP5.4.0がもうすぐ出るので
プログラムな話題担当のaotaです。ご無沙汰です。←
PHPerの2011年最後にして最大の話題は何といってもPHP5.4です。今のバージョンが5.3系ですが、5.3.0が2009年1月30日にリリースされたので、約二年ぶりのマイナーバージョンアップ、ということになります。といっても、年内はテスト版のリリースのみで、正式版は来年頭になるようですが、それでも今からわくわくしています。
5.4になると何がすごいのか? という話は、PHP5.4 Advent Calenderというリレー企画で、array()を[]で書けるようにしたrskyさんをはじめとしたさまざまなPHPerの方々が記事を書いてます。大きな変更から細かな違いまで、いろいろ乗っているので興味がある人はご覧ください。
で、今日は5.4とはちょっと関係ないですがPHPの話を。面白いことに気づいたので。
真偽値を求める関数、というのがあります。ざっくりいえば、正しいか正しくないか判定する、というものですね。
$taro = 'male';
$hanako = 'female';
function is_man($person) {
if ($person === 'male') {
return true;
} else {
return false;
}
}
if (is_man($taro)) {
echo '太郎は男です';
}
if (is_man($hanako)) {
echo '花子は男です'; // ここは表示されません
}
こんなふうにif文の中で使うんですが、この真偽値を求める関数は、is_hogehogeというように、頭にisをつける習慣があります。たとえばJavaがそうなっていますし、PHPもそうです。
ところが、Rubyはちょっと面白いです。
if (man?(taro)) {
p '太郎は男です';
}
こんなふうに、isをつけないで、単に語尾に?をつけるだけです。これは直感的で分かりやすいですよね。
PHPもこう書けたらいいのに……と思いますが、無理な話です。関数名に?を含めることができる言語が特殊なだけなのです。
ところで。
スペイン語では、疑問文をこういうふうに書きます。
¿Como estás? (お元気ですか?)
文頭に変な記号がついていますね。さかさまのクエスチョンマークです。
……実はこの記号、PHPでは関数名や変数名として使うことができます。
ということは。
funciton ¿man($person) {
...
}
if (¿man($taro)) {
'太郎は男です';
}
という書き方ができたりするわけです。気持ち悪いですね。
PHPは¿だけでなく、いくつかの変わった記号類と、符号付文字(上で出てきたáなど)を変数名や関数名に使うことができます。ということは前から知っていたのですが、符号付文字が使える、ということだけ注目していて、記号類のことを失念していました。が、この記号類がなかなか面白そうです。
たとえば、無名関数やコールバックとして使える関数名を$ƒに代入するとか、×や÷といった数学記号なんかは使いどころがあるかもしれません。
ネックは、キーボードから入力しにくいところでしょうか。
何にしても、ちょっとした発見です。今のPHPにも、まだまだ知らないことがたくさんあるなあ、と。
そんなわけで、PHP5.4の前にPHP5.3までのおさらいをしておくのもいいかもしれません。aotaでした。