人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

${"var1"} = 123;

$var1 =123;

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

●質問者: qOLOp
●カテゴリ:ウェブ制作
✍キーワード:book PHP print test うp
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ymlab
●20ポイント

URLはダミーです。

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

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

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

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

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

例えば、

${予定} = 123;

print ${予定};

?>

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

${"予定"} = 123;

print ${"予定"};

?>

ではうまくいきます。

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

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

$a = 3;

$b = "test";

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

print $test3;

?>

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

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

◎質問者からの返答

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


2 ● GEN111
●80ポイント ベストアンサー

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' ;

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

◎質問者からの返答

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

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

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

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

なるほどです!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ