• ベストアンサー

変数のパターン処理パート3

すみません、以前  http://oshiete1.goo.ne.jp/kotaeru.php3?q=1456597 でも質問していますが セッションの初期化の段階で HTMLの様々なname属性の属性値で指定した$_SESSIONの値を解放してやりたいんです.name属性の属性値は、全てダブルクオーテーションで囲んであります. そして  <tag1 name="name1" …>  <tag2 name="name2" …>   …  <tagX name="nameX" …> などとなっていた場合 unsetの記述は以下です.  unset($_SESSION["name1"]);  unset($_SESSION["name2"]);   …  unset($_SESSION["nameX"]); です.これをfor文で書くには,おそらく次のようになります.  for($i=1;$i<X+1;$i++){  unset($_SESSION["name".$i]);} ですが,私は,この記述に対しては,次のような疑問を持っています. 疑問1. ["name".$i] でなく ['"name'.$i.'"']とすべきではないか この疑問を解消する説明を見つけることができずに悩んでます.その説明あるいは,その説明が書いてあるサイトを教えていただけないでしょうか.

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

着目して欲しい所は変数の型ではなく、"と'そのものです。 変数とエスケープシーケンス(\n)が展開されるかどうかです。 何故、PHPではこういった仕様なのかといった疑問には当方は答えられません。

参考URL:
http://cai.cs.shinshu-u.ac.jp/sugsi/Lecture/php/php/6-print.html
SariGEnNu
質問者

お礼

ご回答ありがとうございます. えーとですね、質問の意味は $i==1のとき、 "name".$i は "name1" と同じなのでしょうか? ということです.単にPHPパースはそのように処理するからという理由でしょうか?否でしょうか?

その他の回答 (3)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

もともとPHPには型がありませんからこの場合は普通に文字列の結合になりますね "name".$i => "name"."1"($iが1の場合) => "name1"

SariGEnNu
質問者

お礼

ご回答ありがとうございます. えっ、PHPには型がありませんのですか?私は,型はあるけど,宣言しなくても,代入値から自動で型を判断すると思っていました. パース規則について調べるようにしていきたいと思います.

回答No.2

"PHP 変数のパース"をキーワードに検索してみてください。 "と'の違いについて理解が深まると思います。 簡単なprint文におきかえて考えてみてもいいと思います。

SariGEnNu
質問者

お礼

ご回答ありがとうございます.PHP 変数のパースをPHP 変数のパースで調べてみましたが,まだ,よく分りませんでした.ただ、問題の本質はPHPのパース(処理系)にありそうです. 1. "文字列データ".整数データ は全体として   "文字列データ" とPHPはみなすのか? 2. 1.のようなルールは環境変数の中でも通用すルールなのでしょうか? 3. 1.のルールは使用の推奨がなされている安心できるものなのか? ということに絞られてきそうです.

回答No.1

まずは質問前に、該当するPHPのマニュアルぐらい読んでるんでしょうか? ずばり書いてあります。

参考URL:
http://www.php.net/manual/ja/language.types.array.php
SariGEnNu
質問者

お礼

ご回答ありがとうございます. 参考URLを一応,読みましたが,よく理解する必要があります. 特に関係ありそうな内容について考えてみます. これは、PHPパーサのデータ形式の認識と関連付けられそうに思えますが.とりあえず,関係ありそうなところをピックアップしたいと思います. 下位互換性の維持のために未定義の定数は同じ名前の文字列に自動的に 変換されるため、このコードは動作します。 それから、"name"という文字列と$iのint型を格納する変数の連結 "name".$i は 全体として文字列型として認識されるという理解 ですが、もっと直接説明が書いてある部分がわかりませんでした.直接書いてある部分を指して頂けるとありがたいです.

関連するQ&A