[PHP-users 12533] Re: グローバル変数 $HTTP_ と $_ の違いについて

KEntarou isHImaru php-users@php.gr.jp
Mon, 13 Jan 2003 02:17:25 +0900


kehiです。
私も$HTTP_*_VARS派なんですが、
これが推奨されない理由がいまいちわからない一人です。
(むしろ$_*よりいいと思っているのですが)
違っていたらスミマセンが、以下のようなケースではどうでしょう。

On Fri, 10 Jan 2003 23:21:40 +0900 Seto <seto@cii.gr.jp> wrote:
> スーパーグローバル変数について
> Onlineマニュアルには
> http://www.php.net/manual/ja/language.variables.predefined.php
> 
> (たとえばSESSION)
> $_SESSION
> スクリプトのセッションに現在登録されている変数。 以前の$HTTP_SESSION_
> VARS配列(まだ利用可能ですが、 推奨されません)と類似しています。
> 
> と記載されています。
> 
> 
> ここに記載されている推奨されない理由
> (いずれなくなるであろう以外なにかありますか)と
> 
> 類似:なにか違いがある?
> (テストスクリプトで print_r var_dump しても同じ内容でした。)

名前が違うだけとかコピーとか本当にそれだけでしょうか?。

設定にもよるのかと思いますが、
$_*はまさにスーパーグローバルでどこからでも参照できて
$HTTP_*_VARSは関数の中で使用するには
globalで宣言しなくてはいけないと思うので
全然使い勝手は違うような気がするのですが。
たとえば、
<?php
	if($HTTP_POST_VARS[test] == ""){
		print("<html><body>\n");
		print("<form action=\"test.php\" method=\"POST\">\n");
		print("<input type=\"hidden\" name=\"test\" value=\"test\">\n");
		print("<input type=\"submit\">\n");
		print("</form></body></html>\n");
	}else{
		print ("test1 = " .Test1(). "<br>");
		print ("test2 = " .Test2(). "<br>");
		print ("test3 = " .Test3(). "<br>");
	}

	Function Test1(){
		return $HTTP_POST_VARS[test];
	}
	Function Test2(){
		return $_POST[test];
	}
	Function Test3(){
		global $HTTP_POST_VARS;
		return $HTTP_POST_VARS[test];
	}
?>

結果
test1 = 
test2 = test
test3 = test

けひ
★_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/☆
  投げれば答えが返ってくる。あなたのネットのブーメラン 〜e-リサ〜
  http://eresearch.fuji-ric.ne.jp/
★_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/☆