2011年4月11日月曜日

PHP セッション変数をグローバル変数として使ったら 見事に失敗した。とほほ

 セッション変数をグローバル変数として使うのは見事に失敗しました。うまく値を渡せなかったのであります。そこであらためてグローバル変数の使い方を調べてみて、最初に自分でやっていた使い方が正しかったということがわかりました。セッション変数はあくまでもセッション変数として使用すべきでありました。成功していたらなんの問題も無くなったのですが、世の中そんなに甘くはないですね。(泣き)
わかりやすいグローバル変数の使い方が出ているサイトはここです。
PHP:変数のスコープ:グローバル変数を使う際の注意点:global他にもあるのでしょうけれども、最初に検索したこのサイトで問題が解決したので、今のところはこのサイトがベストアンサーサイトですね。
これ引用です。
PHPでは、グローバル変数は、関数の内部で使用する場合、関数の内部でグローバルとして宣言する必要があります。
当初これを知らなかったので、関数内部で変数宣言をするのはおかしいので、ルート上?プログラムの一番最初に全部のグローバル変数の宣言をしてしまったほうが合理的だろうと考えたのですが、PHPにおいてはこれが間違いだったようであります。

以下はダメな例
<?php
$a = 1; /* グローバルスコープ */ 
function Test() { 
   echo $a; /* ローカルスコープ変数の参照 */ 
} 
Test();
?> 
以下が正しい例
<?php
$a = 1;
$b = 2;

function Sum() 
{
   global $a, $b;

   $b = $a + $b;
} 

Sum();
echo $b;
?> 

そして私がやった失敗例
<?php
//↓関数内でいちいち変数宣言するのが面倒なので、ここで宣言してしまう。
   global $a, $b;
//エラーにはならないけど変数には値が入らない。
$a = 1;
$b = 2;

function Sum() 
{

   $b = $a + $b;
} 

Sum();
echo $b;
?> 
ということで、本日は元に戻す作業をやりたいと思います。
「履歴は取ってなかったのか?!」と突っ込みをいれられそうですが、「はい、舐めておりました。履歴を取るほどではないと思いこんでいたのであります。」ということで、全部問題なく稼働させるには今日一日はかかるかも知れません。履歴は取っておくべきだったのですが、何しろウン十年ぶりのプログラミングなので、本当は履歴を取るということ自体も忘れていたというのが正直なところであります。いやはやです。

0 件のコメント: