ホームページ >バックエンド開発 >PHPチュートリアル >小さな疑問によって引き起こされる PHP データ型変換の問題_PHP チュートリアル

小さな疑問によって引き起こされる PHP データ型変換の問題_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-14 10:08:161126ブラウズ

トピックは次のとおりです。

[php]
$a = 3;
$b =
;
$c = $a > 2:4;
エコー $d = $a<$c
/*結果が 1 になる理由の分析*/
エコー $d
エコー gettype($d)
エコー var_dump($d)
/*例 2*/
if('ABC'==0)
「はい」をエコーし​​ます。
その他
「いいえ」をエコーする
/*例 3 結果 $h=10,$g=10;*/
$h=+$g=10;
エコー $h,"$g";
/*これは演算子の優先順位に関するものです*/
?>
結果に困惑しています! ?
弱い型指定言語である PHP では、さまざまな型のデータに対する混合操作が可能です (VbScript と同様)。PHP 解釈エンジンは自動的に型変換を実行します。注意を引く必要があります。
まず、マニュアルの PHP echo() 関数を思い出してみましょう
定義と使用法
echo() 関数は 1 つ以上の文字列を出力します。
文法
エコー(文字列)
パラメータ
説明
文字列
必須。出力に送信する 1 つ以上の文字列。
注: 注: echo() は実際には関数ではないため、括弧を使用する必要はありません。ただし、1 つ以上の引数を echo() に渡したい場合、括弧を使用すると解析エラーが発生します。 echo() 関数は、echo('...') または echo '...' として使用できます。 echo のオペランドの型は文字列である必要があります。
詳しい使い方はhttp://www.w3school.com.cn/php/func_string_echo.aspをご覧ください
PHP のデータ型変換をより深く理解し、計算結果の複雑さと奇妙さを理解するには、次の点に留意してください:
1: 以下のような echo 関数と print 関数の違いに注意してください:
1)、
echo "123" . print("abc"); //構文は正しいですが、出力は 123abc ではなく、abc1231 です
️ . print()関数を実行してabcを出力し、関数の戻り値1に「123」を接続します
Print "abc" . echo('ooo'); //echo('ooo') は構文エラーを引き起こします
2) echo() 関数は簡略化された構文を使用できます。
例:
[php]
$color = "赤";
?>

バラは

3) echo() 関数は print() 関数よりも少し高速です。
次に、ドット演算子の操作に慣れる必要があります。これはネチズン「Zhang Qing (メッシュ)」の例です。
例 1:
最も一般的なケースでは、 echo 'abc' "123" などの文字列を出力します。結果は abc123 になります。説明はありません。
例 2:
エコー true;
出力結果は1です。 true は PHP の組み込みブール定数で、出力前に文字列「1」に変換されます。
エコー false;
出力結果は空です。 false は PHP の組み込みブール定数でもあり、出力前に空の文字列に変換されます。
例 3:
エコー 0=="ABC";
出力結果は 1 です。 0=="ABC" では、文字列 "ABC" が最初に数値型に変換されます (文字列を数値に変換するための別のルールがあります。これについては、チャンス)、これは 0 であり、 0 と比較すると、結果は true になり、 echo true が実行されると、結果は 1 になります。 2 つの型変換がサイレントに実行されます。
echo 'ABC'==0; の結果は依然として 1 であることに注意してください。 0 は文字列「0」に変換されず、文字列「ABC」と比較されて false が得られるわけではないことに注意してください。ははは、変ですか?
同様の質問がもう 1 つあります:
if('ABC'==0)
「はい」をエコー;
その他
「いいえ」をエコー;
出力が「はい」か「いいえ」かわかりますか?
例 4: さらに奇妙な例が​​もう 1 つあります。
エコー 100 . "ABC";ドット記号の両側にスペースがあります
この文では、100は「100」に変換されるため、100ABCが出力されます。
echo 100."ABC"; // 注意!ドット記号の両側にスペースはなく、連続して書かれます
しかし、この文章レポートには文法上の誤りがあります。なぜ? PHP はここでのドット記号を小数点として扱うため、「100."ABC"」は確かに正しい数値ではありません。
エコー 100。「ABC」;
ドット記号の右側にはスペースしかありませんが、これは文法上の誤りです。理由は上記の通りです。
エコー 100 ."ABC";
ドット記号の左側にはスペースのみがあり、構文は正しく、100ABC が出力されます。
類似:
$a = 100;
echo $a . 200; // ドット記号の両側にスペースがあります
出力100200。
$a = 100;
echo $a.200; //ドット記号の両側にスペースはありません
文法エラーです。 「$a.200」も修飾変数ではありません。
例 5:
エコー 100 + "ABC";
出力結果は100です。ここでの「+」記号は算術演算子であり、接続演算子の書き間違いではないため、これによって構文エラーが発生すると考えないように注意してください。 「ABC」は、100を足すと100となる数値0に変換され、文字列「100」に変換されて出力されます。 2 つの型変換が実行されました。
echo 100 + "20" . 30; // ドット記号の両側にスペースがあります
結果出力は 12030 です。
echo 100 + "20" .30; //ドット記号の左側にはスペースがあり、右側にはスペースはありません
文法エラーです。 .30 は double 型の 0.30 として扱われます。 100 + "20" の結果 "120" のすぐ隣に配置されると、PHP は明確に区別できず、エラーを報告します。
いくつかの例を挙げることもできます。よく見てみると、PHP の型変換の規則は実際には奇妙ではないことがわかります。

www.bkjia.com本当http://www.bkjia.com/PHPjc/477788.html技術記事トピックは次のとおりです: [php] ?php $a = 3; $c = $a $b ? 2:4; /*結果が 1 になる理由*/ echo $d; echo gettype($d); /*例 2*/ if(ABC==0)...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。