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

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

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

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

キャスト

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

Q&A

解決済

5回答

1907閲覧

型変換について

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

キャスト

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

0グッド

0クリップ

投稿2015/03/24 09:21

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

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

$dbData === '1'

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

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

よろしくお願いします

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

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

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

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

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

guest

回答5

0

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

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

投稿2015/03/24 15:01

sumeshi0206

総合スコア15

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

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

退会済みユーザー

退会済みユーザー

2015/03/30 06:14

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

0

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

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

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

投稿2015/03/25 06:13

maisumakun

総合スコア145183

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

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

退会済みユーザー

退会済みユーザー

2015/03/30 06:02

ありがとうございます。 なるほど、知らなかったです。 今までの環境だと、文字列になってました。 勉強になりました。 今後も型を意識してやっていきたいですね
guest

0

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

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

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

投稿2015/03/24 10:57

miya

総合スコア81

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

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

退会済みユーザー

退会済みユーザー

2015/03/30 06:22

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

0

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

$dbData === '1'

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

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

投稿2015/03/24 09:31

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2015/03/30 06:24

先輩は、基本的に厳密な比較を嫌う人で==を推奨しています。 …面倒くさいんですって。 ただ、型意識できてるんであれば、必要に応じてでも大丈夫そうですね。 ありがとうございました
guest

0

ベストアンサー

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

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

投稿2015/03/30 06:33

chokojori

総合スコア971

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

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

退会済みユーザー

退会済みユーザー

2015/04/08 01:06

返事が遅くなり申し訳ありません。 phpでは型の理解、アサーション、オブジェクト化など個々に意識する必要がありますね。 ただ、phpで8年位業務してきましたが、そこまでする必要がないと言われ続けて来ました…そんな環境についつい甘えて勉強しない。実行しない自分が悪いのですが おっしゃる通り、自分には合わないと実感しましたので、そろそろphpから卒業?ステップアップ?することに決めました ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問