質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

760閲覧

if ( (int) 条件式 ) {} の構文について

f.k

総合スコア27

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/10/29 03:03

当方PHP初学者です。PHPの条件式に関する質問です。

以前、次のような式を見かけました。

if ( (int) $hoge_1 == $hoge_2 && (int) $hoge_3 == $hoge_4) { ~ 処理が入る ~ }

※変数名は変えてあります

条件式の頭に括弧で囲まれた型名がありますが、この(int)にはどんな意味があるのでしょうか?

よろしければご教授の程お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

たとえば文字列同士の比較だと合致しないものを比較したとします

PHP

1$a="123あああ"; 2$b="123いいい"; 3 4var_dump($a==$b);//false

ここでどちらかの値をintにキャストすると
「==」の比較の場合もう片方の値も自動キャストされて数値の比較をしてくれます

PHP

1var_dump((int)$a==$b);//true 2var_dump($a==(int)$b);//true

むしろ余計な配慮ともいえるので通常変数の比較は「===」で行うのがよいとされます

投稿2021/10/29 03:20

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

f.k

2021/10/29 03:23

ご回答ありがとうございます。 「キャストを行うと、元の値・比較する値どちらも型変換をして比較を行ってしまう」という認識で合っていますか?
yambejp

2021/10/29 03:38 編集

型が違うものの比較は自動キャストするという認識でよいとおもいます $a=1; var_dump($a);//int $b=1.0; var_dump($b);//float var_dump($a==$b);//true var_dump($a===$b);//false なお表現上異なるものでも型と値が一緒なら厳密な比較でもtrueになります $a=1; var_dump($a);//int $b=0x1; var_dump($b);//int var_dump($a===$b);//true; $c=1.0; var_dump($c);//flaot $d=1e0; var_dump($d);//flaot var_dump($c===$d);//true;
退会済みユーザー

退会済みユーザー

2021/10/29 03:41

> yambejp さん 文字列と数値の比較に関しては、8 系で大きな変更が入っています。 https://www.php.net/manual/ja/migration80.incompatible.php#migration80.incompatible.core.string-number-comparision var_dump((int)$a==$b);//true var_dump($a==(int)$b);//true にはならなくなりました。 > f.k さん https://www.php.net/manual/ja/language.operators.comparison.php の「さまざまな型の比較」を読むと良いです。 ただ、yambejp さんがいうように緩やかな比較を使わないのが混乱を避ける最も良い方法です。
yambejp

2021/10/29 03:44

te2jiさん、ありがとうございます そろそろ8系にしないと時代についていけないですね・・・とほほ
f.k

2021/10/29 03:49

te2jiさん、yamabejpさん、ありがとうございました。非常に勉強になりました! 想定しない動きを避けるためにも、基本的には「===」の厳密比較で条件を記述したいと思います。 キャストについて知れたので、今後このような記述が出ても理解できるようになったと思います。 ありがとうございました。
guest

0

ベストアンサー

型キャストといいます。

PHP: 型の相互変換 - Manual


質問に提示のコードではどういう意図でキャストしているのかは不明ですが、たとえば

PHP

1$s = "123a"; 2$n = 123; 3if ((int)$s == $n) { 4 echo "equal"; 5} else { 6 echo "not equal"; 7}

では$sが整数に変換されて123となり結果はequalとなります。

投稿2021/10/29 03:06

編集2021/10/29 03:16
itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

f.k

2021/10/29 03:16 編集

ご回答ありがとうございます。 確認の為追加で質問させてください。 $bar = (int) 1; の場合、$bar はint型に、 $bar = (string) 1; の場合、$bar はstring型に($bar = '1'; とした時と同じ)なるということでしょうか。 私の質問内容でいうと、「変数をint型に変換してから比較する」という処理を行っているという認識で合っていますか? (追記) わざわざ編集していただきありがとうございます。 とても分かりやすいご回答、ありがとうございました!
itagagaki

2021/10/29 03:16

そういうことになります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問