• ベストアンサー

issetで変数の存在をチェックした際に・・・

以下のようなスクリプトについて質問です。 if(!isset($hoge)){echo"hoge";} 上記のスクリプトの結果、$hogeが定義されていないはずなのに、hogeが出力されていたので、試しに直前にecho$hoge;と加筆してみたところ、「Notice: Undefined variable: hoge in・・・」が出ました。 $hogeが未定義ならhogeが出力されないはずなのに、hogeが出力された上に$hogeの未定義noticeが出る理由が分かりませんでした。 理由が分かる方(または想像がつく方)、ご教示ください。

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5094/13315)
回答No.1

!isset($hoge) ですから、$hoge がセットされていない時に TRUE になりますよ。 なので、今の動作が正しいと思います。

mic_goto
質問者

お礼

おっしゃる通りでした。 ケアレスミス(「!」を付けてしまっていた)でした。 申し訳ございません。 ご指摘ありがとうございます。 大変助かりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 関数の引数に未定義の変数を渡すとエラーが出る

    自作の関数で、issetとemptyを一緒に判定する関数を作っているのですがエラーが出ます。 ある変数が「未定義」または「null」または「""(空白)」の場合はnullである、という関数を作りたいです。 ------------------------------------------ function is_null_ex($value){  if (!isset($value)) {return true;}               // 未定義かnullの場合、trueを返す  else if (strlen(strval($value)) === 0) {return true;}   // 空白の場合はtrueを返す  else {return false;}                      // $valueに値が入っている場合はfalseを返す } is_null_ex($val); ------------------------------------------ 上記の関数で$valueが未定義の場合にfuncを使うと、次のようなエラーが出ます。 Notice: Undefined variable: val つまり、未定義の変数を引数に渡すとエラーが出ます。 「未定義なら関数に渡さなければ?」と思うかもしれませんが、そもそもこの関数は「未定義」または「null」または「""(空白)」を判定したい関数なのです。 この場合、どうすれば良いのでしょうか? エラーは出ますが上記の関数で「if (!isset($value)) {return true;}」の部分できちんと判定はされています。 PHP5.3系で運用しています。 ぞうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • 配列名や変数の一部として変数(文字列)を使う方法?

    PHPを勉強し始めたばかりの者です。以下のような状態で、 配列の要素(例「へべれけ」)を出力したいのですが、 どうもうまく行きません。どうかアドバイスをいただけませんでしょうか? <?php $arDrunk = array("ほろ酔い","へべれけ","記憶なし"); $status = array("Sleepy","Drunk","Hungry"); $ref = $status[1]; //Drunk $hoge = "ar$ref"; //arDrunkと入れているつもりです。 // ↓print_rではちゃんと全ての要素が閲覧できるのに echo "<pre>"; print_r($$hoge); echo "</pre>"; // ↓では何も出力されません。 echo $$hoge[1]; // $arrayDrunk[1]、つまり「へべれけ」を出したい。 echo '$$hoge[$i]という形では使えないのでしょうか?' ?> もしかして$$hogeを処理するための、JavaScriptでの evalのようなものがあるのでしょうか?

    • ベストアンサー
    • PHP
  • 変数の定義の仕方

    ループ処理によって何度か呼び出される箇所で、何度呼び出されたかを判定したいのですが、以下のソースのように書くと"Notice:Undefined~"($_SESSION["i"]が定義されていません)と怒られてしまいます。 【a.php】----------------------------------------------------- <? $_SESSION["i"]++; //未定義でいきなり使う echo "現在" .$_SESSION["i"] ."回目の呼び出しです。"; ?> ---------------------------------------------------------------- かと言って、ファイルの先頭で $_SESSION["i"] = 0; などと定義してしまうと、値がクリアされてしまいます。 サーバーの設定を変えずに警告を出さないような書き方はないでしょうか? ご存知の方、どうぞ宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHP 下記エラーメッセージの解消について

    下記PHP エラーメッセージの解消方法と、正常にプログラムが動くための簡単なスクリプトも添えていただければ幸いです。よろしくお願い申し上げます。 ■エラーメッセージ (1)Notice: Undefined variable: error in C:\xampp on line 66 (2)Notice: Undefined variable: error in C:\xampp on line 69 ■スクリプト <body> <h1>ログインする</h1> <form action="" method="post"> <dl> <dt>メールアドレス</dt> <dd> ⇒(ここからPHP文です) <input type="text" name="email" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['email']); ?>" /> <?php if ($error['login'] == 'blank'): ?> <p class="error">* メールアドレスとパスワードをご記入ください</p> <?php endif; ?> <?php if ($error['login'] == 'failed'): ?> <p class="error">* ログインに失敗しました。正しくご記入ください。</p> <?php endif; ?> ⇒(ここまでPHP文です) </dd> <dt>パスワード</dt> <dd> <input type="password" name="password" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['password']); ?>" /> </dd> ......省略 </form> なのですが、 下記エラーメッセージが出てしまいます。 (1)Notice: Undefined variable: error in C:\xampp on line 66 (2)Notice: Undefined variable: error in C:\xampp on line 69 これは、上記スクリプトのPHP文を指しております。 どのように初期化をすればよいかわからず、ここで立ち止まっておりました。 ☆どうすればこのエラーメッセージを解消でき、また、本スクリプトが正常に作動しますでしょうか? ☆初期化のためのスクリプトを添えて頂ければ嬉しく思います。 みなさまのお力を貸して頂ければ幸いでございます。 よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • phpのクラスにて別ファイルの変数について

    PHPのクラス内で別ファイルで定義した変数を呼び出したく "require_once"でそのファイルを読みこみその変数を呼び出したのですが 「Notice: Undefined variable:」のエラーが表示されました。 他のクラスではないphpプログラムでは正常に表示されましたが クラスでは別の方法で表示する必要があるのでしょうか。 可能であればその手段もご提示頂ければ幸いです。 どなたかご教示頂けないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 可変変数にアロー演算子を使いたい

    例えば、 /** $hoge->appale1 は 10 $hoge->appale2 は 20 $hoge->appale3 は 30 */ このように定義されていたとします。 それを可変変数で for( $k=1; $k<=3; $k++ ){  $dynamicName = 'hoge->appele' . $k;  print "apple{$k}は" . $$dynamicName . 'です'; } のように出力したいのですが、アロー演算子を含んだ可変変数だと$hoge->apple1の数値を出力してくれません。 どのように記述すればいいでしょうか? また、可変変数で不可能であれば代案でも結構です。 お分かりになる方、ご回答お願いいたします。

    • ベストアンサー
    • PHP
  • function の 戻り値の、値が入らない。

     一度作ったPHPを見直しています。 で、 globalを変数はどうしてもな時と、ここで みました。 私も、メモリーの節約や、きちんとしたスクリプトを 書くために、少なくしようと思うのですが、関数の 戻り値が、 Notice: Undefined variable: d in ○○○ 値がないと、注意がはいります。 (注意自体は、分かって出しています。) $a = 10; $b = 15; tst($a,$b); echo $d ; <?php function tst($a,$b){ $d = $a + $b ; echo $d ; return $d ; } ?> 関数内部の、echo $d;では、表示されるので、 間違ってはいないと思うんですが、どこが違うんで しょうか? HPや、本で調べてはみたんですが、下手の考え休むに にたり、かなーと、思ってきたので、もうお風呂に 入ろうかと。^^; よろしくお願いします。

    • ベストアンサー
    • PHP
  • 変数の名前をループで

    $hoge1 $hoge2 $hoge3 という変数があるとします。 そしてこの変数の中身の数のカウントを1回のループで行いたくて下のようなスクリプトを書きました。 $j=0 for($i=0; $i<3; $i++) { $j++; $aaa='$hoge' . $j; $cnt=count($aaa); print $cnt; } しかしこれだと$task1、$task2、$task3という文字列になってしまい、count関数を使っても1が出力されるだけにしかなりません。 "変数"として認識させることは可能でしょうか?

    • ベストアンサー
    • PHP
  • javascriptの変数をPHPの変数で受ける

    下記のようなjavascript において、グローバル変数clicked の値を PHPの変数$clickedで受けたいのですが、どうすれば受け取れるでしょうか? var_dump()してみると、undefinedや、NULLと表示されます。 要は、カレンダーの<td>要素をクリックしたときの日にちの番号を PHPの変数で受けたいのです。 echo '<tr id="calheader" bgcolor="#ffffcc">'; for($i=1; $i<=7; $i++){ echo '<td valign="top" align="center" class="smallText" id="'.$i.'" onclick="pusharea(this);">'.$i.'</td>'; <script language="javascript"> <!-- var clicked; // グローバル変数 function pusharea(obj){ clicked = obj.id; } // --> </script> </head> ----------------------------------------------- <script language="javascript"> alert(clicked); // <?php echo $clicked;?>=clicked; </script> <?php var_dump($clicked); echo '<tr>'; for($i=1; $i<=7; $i++){ /*if($i===$clicked)*/ echo '<td valign="top" height="50" align="center" class="smallText">'.$user.'</td>'; //else echo '<td valign="top" class="smallText">&nbsp;</td>'; } echo '</tr>';

  • pathを追加するスクリプト

    初歩的な質問内容ですが、よろしくお願いします。 ある作業マシンにログインするたびに、 export PATH="/hoge:$PATH" と打つのが面倒なので、スクリプトを作ることにしました。 スクリプトを作るのは初めてなので、ちょっとネットで調べて、 path.shというファイルに #!/bin/sh export PATH="/hoge:$PATH" echo $PATH と記述して、 $ sh path.sh と実行しました。 すると、スクリプト内のechoによって表示された$PATHを見ると hogeの部分がちゃんと追加されているように見えるのですが、 もう一度改めて(スクリプトでなく)$ echo $PATH と打ってみるとhogeは$PATHに追加されていず、 実際にもpathが通ってくれてないです‥。 理由、解決策など、教えて頂けるとうれしいです。 よろしくお願いします。 --- また、普通はこういう場合、.bash_profileなどを編集すると思うのですが、今回それはしたくないです。理由は、 自分がこのマシンの使うのが一時的ということもあって、 自分のユーザとしてでなく、rootとして入っている為です。 自分以外の人もrootでログインすることが多いので、 スクリプトを実行するような形でpathを変更したいです。