[PHP-users 12930] Re: テキストボックスに値が入りません。

Mashiki php-users@php.gr.jp
Sat, 01 Feb 2003 17:16:47 +0900


 Mashikiです。

おお、なるほど。なぜわかったのかわからず2日ほど悩んでメールした
のですが、元発言をCut&Pasteしたソースだと思ったところが敗因でした。
経験と推理からからの、あてずっぽうということですか。

 とりあえず、判断した根拠がわかってすっきりのはずだったんですが、
事件はあらたな局面に

>きしだです
>
>> これ、何でわかるんですか?
>> >> <input type="text" name="Year01"  size="5" maxlength="5"
>> >> value="<? echo $Acc_Y; ?>">年
>> >$が全角になってるとか。
>
>推理の過程としては
>・PHPはちゃんと動いている
>・$Acc_Y自体には値が入っている
>・「echo」は出力されていないのでPHPのスクリプトとして解釈されている
>      →<?は全角ではない
>・$Acc_Yが変数として解釈されていない
>      →$が全角
>となります。


ここで、$が全角だとphp的には「定数」に解釈されるってことは
ないっすか?
最後のこの部分、

>・$Acc_Yが変数として解釈されていない
>      →$が全角

・$Acc_Yが変数として期待している値を持っていない
    → 「$」以外の「A」「c」「c」「_」「Y」「;」のいずれかが全角

てな帰結もあるような気がする。


# ほんとに$だったんだろうか?
# でも元発言者も$を直してOKだったって言ってるし... 謎。


自分のよくやる全角がらみの失敗は、

   echo "氏名: $LastName $FirstName\n";

のような場面で、変数の間を全角ブランクを入れてしまうようなことが
ありますね。

   echo "氏名: {$LastName} {$FirstName}\n";

と書いておけば間違いはないと思っていても、すっきりした?書き方が
好きなので、ちょくちょくやってしまいます。


 最も、開発機は必ずerror_reportingを「E_ALL」にしているので
自分としては発見が遅れて問題になることはありません。


元発言者と初心者の方へ提案ですが、少なくとも開発中はphp.iniの
error_reportingをE_ALLにしておきましょう。環境を変更する権限を
持っていない方でも全てのスクリプトの頭に

    ini_set('error_reporting','2047');

をつけるなどして、全てのワーニングを確認できるようにすれば、つま
らないことで悩んだり、MLで恥をかくことを劇的に減らせると思います。

たとえば以下のスクリプトの場合、

------------
<pre>
<?php
  ini_set('error_reporting','2047');

  $a = $b;
  echo a;
  echo $a;
?>
------------

実行すると

Notice:  Undefined variable:  b in 
         /var/www9/html/test/test.php on line 4

Notice:  Use of undefined constant a - assumed 'a' in 
         /var/www9/html/test/test.php on line 5
a

Notice:  Use of undefined constant $a - assumed '$a'in 
        /var/www9/html/test/test.php on line 6
$a

となり、
・値の設定されていない変数 $bを使用した
・定義されていない定数「a」を使用した
・定義されていない定数「$a」($が全角)を使用した
ことがphpによって指摘されます。

>でも、結局は、最近Javaを教えてて「"」が全角になってるために起きるコンパ
>イルエラーなどを頻繁に見てるから、類推できたのだと思います。
>「字づら」があってるときには全角、という標語が心にあるわけです。

Javaに限らず、日本語の入った文字列の終わりのクォートは全角をやって
しまいそうですね。