ネタ元 [我留流][がるパタ]まずはご挨拶
動的言語が全盛になりつつありますが、動的言語であろうと option でもかまいませんが、変数制限宣言を強制することこれは最低限必要だと思います。
これをやらないことで、debug でいかに死んだことか。変数名を typo して想定した結果が返らず、それを見つけ出すための苦労といったら。。。
Typo で思い出しましたが、おいらが最初に触れた言語は MSX-BASIC です。その当時まだ小学生でしたが、雑誌に書かれている code を意味もわからず入力したものです。Touch typing も満足にできず、書かれた内容もわからず入力していましたから、当然結果は "Syntax error" の嵐。
その後、programming というか PC から離れた時代がありましたが IDE が存在する時代になって、便利になったなぁと思うことしきり。勝手に補完してくれる! 間違ったら警告してくれる! なんて素晴らしいんだ! ものすごく感動したものです。正直、IDE 無しには coding したくない!
まあ、余談はさておき本題の変数宣言の強制です。
さくっと処理を書期待きたい場合には変数宣言なんてうざいと思うでしょう。また、ですが、ちょっとした規模を書くときにはあると無いとでは debug 効率が雲泥の差です。IDE を使っていればまだ見つけやすいですけど、使ってないなら本当にドツボにハマります。
そういう意味で言うと多くの人から酷評される VB (.NET 以前でも) って非常にまともだと思う。Option Explicit 宣言すれば変数宣言強制できるし。VBScript 以外では型安全性持っているし。
で、がるさんが問題としている PHP ですけど、タレこみ情報によると、error_repoting に E_NOTICE を与えてやることで、未定義のものは検出可能みたい。
Perl は use strict をつけることで変数宣言を強制することが可能らしい。
Ruby だと実行時に未定義の変数を参照すると NameError が出るらしい。
Python も Ruby 同様 NameError が発生?
ECMAScript (JavaScript, JScript) では TypeError が発生することがある。
どっかでまとめて検証してみることが必要かも。。。詳しい方教えてください。
もう一つの問題としてある程度の型安全性を確保していないものは、変数の未定義と同じくらい厄介なことが発生するんですが、これはまたの機会に。