PHPに関する質問です。

The Zend PHP Certification Practice Test Book
というPHPの資格本にあったのですが

${"var1"} = 123; 

$var1 =123;

これが同義だと。
この意味を説明していただけないでしょうか。
実際に走らせたら確かにその通りなんですよねぇ。
----------------------------
<?
${"var1"} = 123; 
print $var1;
?>
出力結果結果
123
----------------------------
そもそも中括弧の意味が理解できていない気がしてるのですが…
----------------------------
<?
{$a = "123";}
print $a;
?>
出力結果結果
123
----------------------------
制御文でもないのに何で中括弧を使えるのか?
???です。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/02/11 16:31:45
  • 終了:2007/02/12 04:28:05

ベストアンサー

id:GEN111 No.2

GEN111回答回数472ベストアンサー獲得回数582007/02/11 20:09:06

ポイント80pt

http://www.php.net/manual/ja/language.control-structures.php

全ての PHP スクリプトは、一連の文からなります。 文としては、代入、関数コール、ループ、条件文、そして何もしない文(空の文) さえ使用することができます。 文は、通常セミコロンで終了します。加えて、文は、中括弧によるグループ文で カプセル化することによりグループ化することが可能です。 グループ文は、同時に文にもなります。

 基本的に中括弧によるグループ化は複数の文を単独の文として扱うようにするものです。

${"var1"} = 123;

これは可変変数のための特別な構文です。

http://www.php.net/manual/ja/language.variables.variable.php

 こんなこともできます。
>||
${1+2+3} = 'six' ;
echo ${6} ;

${$name = 'yamada'} = 'tarou' ;

 これが先のグループ化と違うのは

${1+2+3;} = 'six' ;

 これがエラーになることで分かります。中括弧の中に入るのは式だけで文は入れられないのです。

id:qOLOp

ああ~っ、たぶん可変変数だとは思ったんですが、マニュアルにばっちり記述がありましたねっ!

----------------------------------

$$a[1]と書いた場合、 $a[1]を変数として使用したいのか、 $$aを変数とし [1] を変数の添え字としたいのかを、 パーサが知る必要があるのです。この曖昧さを解決するには、前者では ${$a[1]}とし、後者では ${$a}[1]とする構文を用います。

----------------------------------

なるほどです!

2007/02/12 04:24:55

その他の回答(1件)

id:ymlab No.1

ymlab回答回数508ベストアンサー獲得回数342007/02/11 20:07:44

ポイント20pt

URLはダミーです。

http://q.hatena.ne.jp/answer

面白いと思い、考えて見ました。

まず、変数に中括弧を付けるのは、どこまでが変数ですよ。

と宣言するのにつかえると思います。

あと、二重引用符なのですが、これがないと、マルチバイト文字列のときに、日本語では特にシフト-JISやEUCにからみで、まずいことになります。

例えば、

${予定} = 123;

print ${予定};

?>

では、うまくいきませんが、

${"予定"} = 123;

print ${"予定"};

?>

ではうまくいきます。

また、本来上のプログラムは、一重引用符でよいでしょう。

二重引用符を使いたい場合は、

$a = 3;

$b = "test";

${"$b$a"} = 123;

print $test3;

?>

こんな風に使ったりできます。

ちなみに、このとき、中括弧をはずすとエラーとなります。

id:qOLOp

「どこまでが変数ですよ。」ということですね。ふむふむ。

2007/02/12 04:23:13
id:GEN111 No.2

GEN111回答回数472ベストアンサー獲得回数582007/02/11 20:09:06ここでベストアンサー

ポイント80pt

http://www.php.net/manual/ja/language.control-structures.php

全ての PHP スクリプトは、一連の文からなります。 文としては、代入、関数コール、ループ、条件文、そして何もしない文(空の文) さえ使用することができます。 文は、通常セミコロンで終了します。加えて、文は、中括弧によるグループ文で カプセル化することによりグループ化することが可能です。 グループ文は、同時に文にもなります。

 基本的に中括弧によるグループ化は複数の文を単独の文として扱うようにするものです。

${"var1"} = 123;

これは可変変数のための特別な構文です。

http://www.php.net/manual/ja/language.variables.variable.php

 こんなこともできます。
>||
${1+2+3} = 'six' ;
echo ${6} ;

${$name = 'yamada'} = 'tarou' ;

 これが先のグループ化と違うのは

${1+2+3;} = 'six' ;

 これがエラーになることで分かります。中括弧の中に入るのは式だけで文は入れられないのです。

id:qOLOp

ああ~っ、たぶん可変変数だとは思ったんですが、マニュアルにばっちり記述がありましたねっ!

----------------------------------

$$a[1]と書いた場合、 $a[1]を変数として使用したいのか、 $$aを変数とし [1] を変数の添え字としたいのかを、 パーサが知る必要があるのです。この曖昧さを解決するには、前者では ${$a[1]}とし、後者では ${$a}[1]とする構文を用います。

----------------------------------

なるほどです!

2007/02/12 04:24:55

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません