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

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

ただいまの
回答率

90.49%

  • PHP

    20764questions

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

  • キャスト

    21questions

    キャストとは、オブジェクトの型の変換が許可された場合に、明白に別の型への変換を行うプロセスのことです。

型変換について

解決済

回答 5

投稿

  • 評価
  • クリップ 0
  • VIEW 922
退会済みユーザー

退会済みユーザー

型変換ですが、DBの型に合わせてその都度変換させて行くのは無駄ですか?

先日、先輩から受け取ったスクリプトの内容なのですが、
DB上のデータでint型である$dbDataを

$dbData === '1'

みたいな形で比較していたので、int型に変換しないんですか?と聞いたところ
「結局、DBからの取得時やPOST、GETでstringになるんだからこれでいいんじゃないの?DB登録時に変換すればいいだけじゃん」
って感じでした。

そう言われるとそうなのかもなんですが…
元々、int型のデータをstringのまま比較するのはなんかしっくりこないので、
本来はどうなのかを教えていただければありがたいです。

よろしくお願いします

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

+1

場合によりけりなので、それだけの情報では何とも…
先輩の言う通りのケースもありますし。

$dbData === '1'

ってことは、入ってるのはstring型だという事は理解しているので、問題ないんじゃないでしょうか?

分かってないで完全型一致で比較してバグ仕込んでる人、見たことありますが…

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/03/30 15:24

    先輩は、基本的に厳密な比較を嫌う人で==を推奨しています。
    …面倒くさいんですって。

    ただ、型意識できてるんであれば、必要に応じてでも大丈夫そうですね。
    ありがとうございました

    キャンセル

+1

必要に応じてキャストでいいと思う
数字文字列にしとくと、10の位とかを瞬時に取れる隠れた利点もあるし、、、それはどうでもいいや。

ただ、キャストするとよくわからないものを int(0) にできる利点はある。サニタイズというのか知らないけど。

俺は、入力をサニタイズなんてしないからね、弾きはするけど。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/03/30 15:22

    必要に応じてでもいいような気がしてきました。
    型さえちゃんと意識していれば問題無いですもんね。

    キャンセル

+1

であれば、DBの型も数値ではなく文字にすれば良いのでは?
そうでなければ、DBから取り出す時にintにして、Webブラウザとのやりとりもフレームワークかまして文字であることを意識せず、数値型で取り扱うような仕組みにするべきです。


とここまで書いてPHPの話であることに気が付きました。PHPってまともなフレームワーク無いの?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/03/30 15:14

    DB上の数値を文字列にするのは…今までやったことありませんね。

    まともかどうかはわかりませんが、自分はcodeigniterと5年前くらいにzendFramework使ってました。どちらも、自分のやり方だと文字列になってましたね。出来るのであれば使いたいですね。

    キャンセル

+1

PHPだと、ドライバによっては数値型の列が文字列型で来てしまうことがありますし、コードが同じでも環境の変化でそのまま数値で来ることもありえます。

PHPのエクステンションを入れ替えるとDBからの返り値の型が変わった事例

数値なら数値にキャストして比較するのが安全でしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/03/30 15:02

    ありがとうございます。
    なるほど、知らなかったです。
    今までの環境だと、文字列になってました。
    勉強になりました。

    今後も型を意識してやっていきたいですね

    キャンセル

checkベストアンサー

0

PHPでは、変数の型は文脈によって変化するので、ある瞬間、整数型として代入したとしても、別の行では文字型に変化してしまっているかも知れません。
なので「元々、int型のデータをstringのまま比較するのはなんかしっくりこない」というのは、PHPの考え方や言語の仕組みに慣れていないことを示していると思います。
PHPでは、変数の型(4つの基本的なスカラ型)については、相互に変換されるものであることを理解しておく必要があります。
その上で、安全なコードを書くのはそれなりに注意が必要で、実際、しばしばバグの温床となっています。

PHPでは、型に頼ることがむずかしいので、どうしても不安ならばアサーションをたくさん入れるとか、クラスを積極的に定義するなどの方法で対処するよりないと思います。もっとも、そもそもそんな心配をするくらいなら、PHPなど使わずに、より強い型のある言語を使うべきです。(動的な言語でも、PHPやPerlは特に型が弱い言語であり、PythonやRubyはより型が強く、Groovyに至っては動的型付けと静的型付けを選択できる言語ということになりますね。)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/04/08 10:06

    返事が遅くなり申し訳ありません。
    phpでは型の理解、アサーション、オブジェクト化など個々に意識する必要がありますね。

    ただ、phpで8年位業務してきましたが、そこまでする必要がないと言われ続けて来ました…そんな環境についつい甘えて勉強しない。実行しない自分が悪いのですが

    おっしゃる通り、自分には合わないと実感しましたので、そろそろphpから卒業?ステップアップ?することに決めました

    ありがとうございました

    キャンセル

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

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20764questions

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

  • キャスト

    21questions

    キャストとは、オブジェクトの型の変換が許可された場合に、明白に別の型への変換を行うプロセスのことです。