PHP学習コラム第5回『変数の命名方法』(ぺち子の目指せPHP初級試験合格!)を公開しました。

PHP学習コラム第5回『変数の命名方法』(ぺち子の目指せPHP初級試験合格!)を公開しました。

テンプスタッフ・テクノロジー株式会社

2012年9月5日 21:15

※この記事は読者によって投稿されたユーザー投稿のため、編集部の見解や意向と異なる場合があります。 また、編集部はこの内容について正確性を保証できません。
こんにちは~、ぺち子です! 前回はクォートとヒアドキュメントのお話でした。 今回は『変数の命名方法』について書いてみます。 変数名は先頭に「$」をつけますよね。 私は他の言語も使っている癖で、たまにこの「$」を忘れてエラーになったりします。笑 $の後ろにはアルファベットとアンダースコア(_)だけが使えます。 1文字で「$a」や「$_」でも大丈夫ですが、後者は使われているのを見たことがありません。 変数名は、他の人(未来の自分も含む)が見たときに、分かりやすい名前をつけるべきです。 なので、こういうのはよくない例です。 ------------------------------------------------------------ <?php // 入力フォームの内容 $a = $_POST["id"]; // ID $b = $_POST["password"]; // パスワード $c = $_POST["password2"]; // パスワード(確認用) // ~省略~ if($b !== $c) { print "パスワードが確認用パスワードと違います"; } ?> ------------------------------------------------------------ 後からパッと見たときに、「$b と $c って何だっけ?」と、上の方まで戻って確認しなけばいけないので、とても分かりにくいですよね。 IDなら「$id」「$user_id」「$userId」、パスワードなら「$password」「$user_password」「$userPassword」とか、中身を表す名前にしましょう。 変数の場合、大文字と小文字は区別されるので、「$userId」と「$userID」は別物です。 紛らわしいので両方使わないようにしましょう。 また、開発者が日本人だけだからといって、ローマ字の名前をつけるのもあまり関心されません。 プログラミングは世界共通言語なので、英単語を使いましょう。 変数名のつけ方はいろいろありますが、こういう命名規則はだいたいコーディングルールで決まっています。 長い英単語を省略するかどうかとか(会社名→$company_name、$comp_name、$cmpnName)、訳語を何に統一するかとか(編集→edit、mod、modify)、自分のルールを作ったり、すでにあるルールに従います。 いくつか私が見たことのあるルールを紹介してみます。 先ほどのコードの続きで、入力内容をデータベースに保存することになりました。 ------------------------------------------------------------ <?php // ~省略~ // パスワードを保存 savePassword($password); ?> ------------------------------------------------------------ 「savePassword」は、私が今適当に考えた関数です。 「$password」をデータベースに保存してくれるとしましょう。 さて、このコードを後で見直したときに、「$password」が安全かどうかすぐに分かるでしょうか。 ユーザのパスワードを保存するときは、復元できない方法で暗号化するのが一般的ですよね。 同じパスワードを暗号化すると毎回同じ文字列になりますが、その文字列からパスワードは復元できない仕組みです。 システムの管理者でもパスワードを知るのはよくないですし(他で使ってるかもしれないし)、データが盗まれたらそれこそ問題です。 この「$password」は暗号化前でしょうか、後でしょうか。 もちろん上の方のコードを遡れば分かります。 ------------------------------------------------------------ <?php // 入力されたパスワード $password = $_POST["password"]; // ~省略~ // パスワードを暗号化 $password = MD5($password); // ~省略~ // パスワードを保存 savePassword($password); ?> ------------------------------------------------------------ あぁ、暗号化されていましたね。 でも、そんな確認を毎回やるのも手間です。 なので、暗号化前の変数と、暗号化後の変数の、名前を別々にするのです。 ------------------------------------------------------------ <?php // 入力されたパスワード $raw_password = $_POST["password"]; // raw: 生の // ~省略~ // パスワードを暗号化 $encrypted_password = MD5($raw_password); // encrypted: 暗号化された // ~省略~ // パスワードを保存 savePassword($encrypted_password); ?> ------------------------------------------------------------ これなら最後の一行を見ただけでも、暗号化されたパスワードを保存しているのが分かります。 少なくとも、コードを書いた人がそういうつもりなのは分かりますし、もし下のようになっていたら明らかにバグと分かるので、バグの発見も簡単です。 ------------------------------------------------------------ <?php // パスワードを保存 savePassword($raw_password); // raw~になってる! ?> ------------------------------------------------------------ こういうテクニックは他にもあります。 PHPは、変数の中にどんな種類のデータを入れようが、勝手がいいように解釈してくれます。 (それがたまに余計なお節介で、気づきにくいバグを生むんですが…) 下の例を見てください。 ------------------------------------------------------------ <?php ユーザの誕生日が7月なら if($user_birthmonth === 7) { // メッセージを表示 print "今月お誕生日ですね、おめでとうございます!"; } ?> ------------------------------------------------------------ このユーザは7月が誕生日だとして、「$user_birthmonth」に入っている値は、数値の「7」でしょうか、文字の「"7"」でしょうか、それとも「"July"」でしょうか? 後の章の話になっちゃいますが、「if($user_birthmonth === 7)」は、「$user_birthmonth」が数値の「7」のときしか、正しいと判断されません。 もしかしたら「$user_birthmonth」には文字が入っていて、誰にもこのメッセージが表示されないかもしれません。 でも、パッと見ただけでは中身の種類まで分かりません。 こういうときに、「$int_user_birthmonth」という変数名にしておけば、そんな不安もなくなります。 (例なのでちょっと変数名が長すぎです。笑) そしてやっぱり、下のようなバグもすぐに発見されるでしょう。 int(数値)って書いてあるのに、「"July"」かどうか調べても無意味ですもんね。 ------------------------------------------------------------ <?php ユーザの誕生日が7月なら if($int_user_birthmonth === "July") { // メッセージを表示 print "今月お誕生日ですね、おめでとうございます!"; } ?> ------------------------------------------------------------ 教科書的には、「変数に使える文字は何か」とか、「大文字と小文字は区別されるか、とかがよく載っていますが、それ以上の実際の使われ方は、チームに入ってコードを書いたり、他人のコードを読む機会がないとなかなか分からないものですよね。 昔は「オープンソースソフトウェアのコードを読め」とか言われましたが、量が膨大なので、私はムリでした。笑 今なら他人がGithubとかで公開しているちょっとしたソースを読ませてもらうのもいいんじゃないでしょうか。 それではまた次回~! ____________________________________________________________ ************************************************************ 「ぺち子の目指せPHP初級試験合格!」PHP学習コラム目次 第一回 「info.phpを作成し、ブラウザで表示させる おまけ:GUNDAM」http://on.fb.me/K5jfiq第二回 「開始タグと終了タグの適切な書き方」http://on.fb.me/MwF3T4第三回 「ホワイトスペースと大文字小文字の使い方」http://on.fb.me/KzPf1T第四回 「ダブル&シングルクォートと、ヒアドキュメントの使いどころ」 http://
この記事のキーワード

人気記事トップ10

人気記事ランキングをもっと見る