型変換プログラムで疑問!同じ変数でも実行結果が異なる理由は?

このQ&Aのポイント
  • 型変換プログラムで質問です!以下のプログラムで実行結果が異なる理由について疑問があります。
  • プログラムの6行目と12行目で同じ変数に対してgettype関数を使用していますが、実行結果が異なるのはなぜでしょうか。
  • booleanとstringの違いについて、詳しい方からの回答をお待ちしています。
回答を見る
  • ベストアンサー

型変換プログラムで

  以下の型変換プログラムで質問です!? PHPレベルは下の下です。 <html> 1 <head> 2 <title>型変換</title> 3 </head> 4 <body> 5 <?php 6 $var = TRUE; 7 print (gettype($var). "<br />"); 8 $var=100; 9 print (gettype($var). "<br />"); 10 $var=100.001; 11 print (gettype($var). "<br />"); 12 $var="TRUE"; 13 print  (gettype($var)); 14 ?> 15 </body> 16 </html>   以上ですが、result(実行結果は)以下です。  boolean integer double string  以上の実行結果で疑問に思うことは、 同じ変数のTRUEでありながら プログラムの6の実行結果の”boolean”と   プログラム12の”string”の実行結果と違いがあるのはなぜですか!?  ※agunuz 回答禁止    宜しくお願いします。

  • PHP
  • 回答数6
  • ありがとう数5

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

  • ベストアンサー
noname#244856
noname#244856
回答No.4

>>同じ変数のTRUE TRUE と "TRUE" は全くの別物です。 Boolean値には TRUE・FALSE という2種類の値のみが存在します。前者はそれです。 後者はたまたまString値の中身が「TRUE」という文字列だっただけ、それだけのことです。 マニュアルよりこっちのほうが初心者向けかな? http://www.shigeweb.jp/php/project_p/?page=type§ion=first

javascriptphp
質問者

お礼

ありがとうございました。 http://www.shigeweb.jp/php/project_p/?page=type§ion=first をよく読んでみます。

その他の回答 (5)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.6

理由は既に出ているので。 型変換 文字通り、型を変換することです。 "100"というようなstringを、100とintに変換して計算する、とか 50というintを"50"という文字列に変換して、文字列結合させる、とか gettype($var)の値は変化していますが、$varには、それぞれの型の定数を「代入」しているだけで、変換されているわけではありません。 gettype関数は、指定した値の型を「判定」しているだけで、変換はしていません。 プログラム6 プログラム12 一連の動作をまとめたもの全体で「プログラム」です。 「プログラム6」という言い方だと、これと同じような「プログラム」が複数あって、そのうちの6番目、という風に感じられます。 今回の場合なら「6行目」「行番号6」等と「行」という用語を使います。 プログラミング用語を間違えると、相手に伝わらないことがあります。 正しく使いましょう。 今回は、「型変換」が質問とは関係なかったこと、プログラム6が行番号6のことだと推測できたこと、で特に問題になっていませんが、今後もうまくいくとは限りません。

noname#244856
noname#244856
回答No.5

掘り返すようで悪いですが… http://okwave.jp/qa/q8071704.html agunuzさんと同じ趣旨のこと言ってますよ? どこが反対なのでしょうか… あとそんなにぶっきらぼうな言い方じゃなくて、的確に指摘されてるだけなのに、その程度で回答禁止で躍起になってるぐらいじゃ… プログラミングの習得へのスピードには個人差があって当然ですが、「教わる」姿勢を忘れないでください。

javascriptphp
質問者

補足

 人間生きていると頭にくることもあります。 我慢することも大切ですが、もっと大切なことは 自分の意見をはっきり言い切る気合いが大切です。  今はそんな心境です^^

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

> 同じ変数のTRUE ――ここの考え方が間違っているかと。 「同じ変数」というなら$varですが、変数は一緒ですが、その値は別物ですので。 論理型リテラルtrueと文字列型リテラル"TRUE"は、評価次第では一致することがありますが、逆に一致しないことも多々あります。 詳しくは、phpのマニュアルをご覧ください。 http://www.php.net/manual/ja/language.types.intro.php

javascriptphp
質問者

お礼

ありがとうございました。 http://www.php.net/manual/ja/language.types.intro.php のリンク先をよく読んで勉強します。

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.2

プログラム言語には、ざっくり分けて、コンパイラ言語とインタプリタ言語に分かれます。 このように同じ名前の変数が違う属性になるのは幾つかのインタプリタ言語の特徴です。 基本的に変数の定義という概念が存在しません。 右辺の結果を左辺で書かれた変数名で作るので、変数名は左辺に出てくる度に再作成されると考えて下さい。 それ以前の変数は削除されます。 この変数の自動削除というのもインタプリタ言語の特有な仕組みです。

javascriptphp
質問者

お礼

 ありがとうございます。 今の私の知識だと理解するのは難しいですが、PHPはコンパイルが不要でインタプリタであることは理解しています。  何となくわかるような気がしますが  徐々に理解を深めていきたいと思います。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 ダブルクォーテーションまたはシングルクォーテーションで囲むと文字型になります。 TRUEはPHPの定数(boolean)です。

javascriptphp
質問者

お礼

有難うございました。  よくとちりますが_ _ 良く見ると"TRUE"でWクォーテーションがついていました。"囲むと文字型"了解しました^^

関連するQ&A

  • phpプログラムの書き方について

    phpは<html>~</html>の中に記載するものなのでしょうか? それともphpプログラムの中にhtmlを記載するのでしょうか? ラジオボタンを10個表示するプログラムを書いたのですが、 実際にブラウザに表示されたものは以下の様な状態になってしまいました。 ------------------------------------------------------------- 該当する年齢を選んでください。 ?php> $i=1; while($i==10){ print "$i "; $i++; } ?> 送信 --------------------------------------------------------------- ソースコード radio.php <html> <head> <title>年齢確認</title> </head> <body> 該当する年齢を選んでください。 <br> <hr> <form method="post" action="radio_uke.php"> ?php> $i=1; while($i==10){ print "<input type='radio' name='r' value'$i'>$i "; $i++; } ?> <input type="submit" value="送信"> </form> </body> </html>

    • ベストアンサー
    • PHP
  • PHPの問題

    下のプログラムご覧ください。 <HTML> <HEAD> <TITLE> 門題2</TITLE> </HEAD> <BODY> <?php $val1 = 90; $val2 = 30; $answer = 90 * 30; $answer1 = 90 / 30; $answer2 = 90 % 30; print "変数X1の初期値は$X1です。<BR>"; print "変数Y2の初期値は$Y2です。<BR>"; print "XとYの積は answerです。<BR>"; print "XとYの商は answer1です。<BR>"; print "XとYで割った剰除は answer2です。<BR>"; ?> </BODY> </HTML> 実行してみたもののエラーになりX1,Y2の所が出ていなくて 答えも出ませんなぜでしょうか? ご存知の方どうかお教えください。

    • ベストアンサー
    • PHP
  • PHPからCプログラムを実行して実行結果をHTML上に表示

    PHP初心者です。PHPからCプログラムを実行して実行結果をHTML上に表示する方法が分からなく困っています。 Cプログラムの中身は、 #include <stdio.h> int main(){ printf("Hello."); } です。 phpの中身は、 <HTML> <HEAD><TITLE>Cプログラム呼び出し</TITLE></HEAD> <BODY> <?php $cmd = "test.exe"; $a = exec($cmd); echo $a; ?> </BODY> </HTML> としており、調べてみるとexec()関数で外部プログラムを実行すると書いてあったのでこのように作成しました。

    • ベストアンサー
    • PHP
  • $argv[1]) && $argv[1]・同じ

     以下のプログラムですが! <html> <head> <meta "charset=utf-8" /> <title>論理演算子</title> </head> <body> <?php if(isset($argv[1]) && $argv[1]) { echo '与えられた引数は真です',PHP_EOL; } else{ echo '引く数が与えられていないか、与えられた引数が真ではありません' ,PHP_EOL; } ?> </body> </html> 以上のプログラムの実行結果は以下となりました。    引く数が与えられていないか、与えられた引数が真ではありません 以上の実行結果は”真でありません”と出ています。    $argv[1]) && $argv[1]・・・&&は理論積の、両辺は同じなのでtrueならばtrueの真だから、  "与えられた引数は真です"と出るのではないんでしょうか!?  以上よろしくお願いします。

    • ベストアンサー
    • PHP
  • parseIntで戻り値がNaNになるのはなぜ?

    parseIntを使って文字列型から数字だけを抜き出して数値型へ変換したいのですが、 下記のようにNaNになってしまいます。何が悪いのでしょうか。 <html lang="ja"> <head> <title></title> </head> <body> <script> var a = "100点満点" var b = parseInt('a',10); document.write('typeof a ⇒ '+typeof a+'<br>'); document.write('var b = parseInt("a",10); ⇒ '+b+'<br>'); document.write('typeof b ⇒ '+typeof b+'<br>'); </script> </body> </html> 上記の結果は、 --------------------------------- typeof a ⇒ string var b = parseInt("a"); ⇒ NaN typeof b ⇒ number ---------------------------------

  • &と|の演算子を使ったif文のプログラムについて

    ↓のプログラムの実行結果について質問します。 public class Test{ public static void main(String args[]){ if(methodA() & methodB() ){ System.out.print(1); }else{ System.out.print(2); } if(methodA() | methodB() ){ System.out.print(3); }else{ System.out.print(4); } } private static boolean methodA(){ System.out.print("A"); return false; } private static boolean methodB(){ System.out.print("B"); return true; } } 上記のプログラムを実行すると AB2AB3 と出力されるのですが、 何故こういう風になるのか教えていただけませんか? また、if文の中をそれぞれ if(methodA() & methodB() ) if(methodA() | methodB() ) と書き換えると A2A3 となるのですが、これについてもイマイチよく分かりません。 メソッドからfalseとtrueを戻り値として受け取り 演算子によって処理を分けているんでしょうけど、 どういう流れで処理が行われているのか 出力結果を見ても読めなくて・・・

    • ベストアンサー
    • Java
  • ルビープログラムのフォーム入力について

    Rubyプログラムを勉強中です。 簡単な掲示板から始めているのですが、実行させるとうまく動きません。 なにかヒントになるものがあれば教えて下さい。 参考サイト http://jp.rubyist.net/magazine/?0012-CGIProgrammingForRubyBeginners-3 エラーの症状 上記サイトの「CGI クラスを使ってフォームデータを取得する」項目で実際にhtmlフォームへ半角英数で入力すると値を返してくれます。 下記は値を返した時のページのソース <html><head></head><body>1<br></body></html> しかし全角入力でフォームへ入力するとするとHTML値を返してくれません。 下記は値を返した時のページのソース <html><head></head><body> 参考サイトのデータをそのまま実行させているのですが、何か原因はわかりますでしょうか? Rubyプログラムの中身は下記のとおりです。 #!/usr/local/bin/rubyrequire "cgi"print "Content-Type: text/html\n\n" print "<html><head></head><body>" c = CGI.newtext = c["t"] print textprint "<br>" print "</body></html>" もしわかれば教えて下さい。よろしくお願いします。

    • ベストアンサー
    • Ruby
  • PHPでの文字列置換の方法について

    質問があります。 PHP5で下記のようなページを作りました。 <?php $a = "あいうえお"; $b = "かきくけこ"; ?> <html> <head> <title>トップページ</title> </head> <body> <?php print $a ?> <?php print $b ?> </body> </html> 実行結果はこうなります。 あいうえお かきくけこ これを、別ファイルに $a = "あいうえお"; $b = "かきくけこ"; と書いたものをインクルードするにはどう書けばいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • ローカル変数での質問です。

    <html> <head><title>no_global.php</title></head> <body> <?php> $a = 1; function gtest(){ print ($a+1); } gtest(); ?> </body> </html> 実行結果は  1  とPHPの教本にあります。    $a = 1 の1は、数字と認識しなくて、文字扱いになるみたいです!   なので計算結果が「1となる」と・参考書には色々書いていあるんですが、  たぶんそれをいいたのでしょう?    この場合、PHPだけでなく、他の言語でも同じ結果がでるのでしょうか?   もし、PHPだけでしたら、不思議です。    

    • ベストアンサー
    • PHP
  • 初歩的なCGIですが

    #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>perlテスト</TITLE></HEAD>\n"; print "<BODY>\n"; print "本文1<BR>\n"; print "本文2<BR>\n"; print "</BODY>\n"; print "</HTML>\n"; 上記プログラムをFTPサーバにアップロードして、perlプログラム内では正しい結果が出たのですが、ブラウザ上で確認したら、htmlのタグが除かれた状態のソースが出てきました。  正しい結果をブラウザ上で表示させるにはどうすればいいのでしょうか?教えてください。

    • ベストアンサー
    • CGI

専門家に質問してみよう