PHPプログラマについて思うことがあったので書いてみようと思います。 まず、PHPは型宣言がなくすごく曖昧です。 厳密にチェックしようと思えばできるのですがそれでも言語として貧弱な所が あります。 例えば下記のような関数があったとします。function example($bool) { if ($bool) { echo "A"; } else { echo "B"; } }引数に0とかnullとか以外をセットするとこの場合 「A」 が表示されます。 ですが、関数がこういう書き方をされているとfunction example($bool) { if ($bool === true) { echo "A"; } else { echo "B"; } }引数の値が 「true」 でなければ 「A」 は表示されません。 この関数の例えを踏まえてこんな会話を聞いたことがあります。 A「ここの関数はtrueを指定しないとダメじゃないの?」 B「1入れても動くんで大丈夫ですよ」 これを聞いていて僕は「何が?」と思ってしまいました。 もしPHPに使用変更があって型が厳密になったらどうするの?とか その関数を作成した担当が値を型までチェックするように変更したら?とか思います。 こういう意識を持っていない人がPHPプログラマには僕を含めて多いと思います。 型が曖昧でとっつきやすいところがPHPの特徴でありいろいろ楽できるところなんですが、 個人的にはあまり好きではないです。 自分でもPHPのそういうところに助けられたりしたことがあるのですが、 できるだけ厳密に型については扱うように心がけようと思いました。 以上なんとなく思ったことでした。 終わり
2012/01/22
【プログラミング】PHPプログラマについて思うこと【PHP】
2011/12/28
【プログラミング】OAuth認証のお話
今日はOAuth認証のことについていろいろ調べてみたのでそのことについて書いていきたいと 思います。OAuthとはOAuthとは 「認可情報の委譲」 を行うプロトコルです。 オースと読むらしいです。 要点としてはあらかじめ信頼関係があるサービス間でユーザの同意のもとセキュアにユーザの権限を 受け渡しするというものです。Oauth認証の相関図OAuth認証の相関関係OAuth認証は下記3つの相関関係でできています。 ・OAuthを提供するサービスプロバイダ(Twitterなど) ・OAuthを使ってサービスを作るコンシューマ ・サービスを使用するユーザ サービスプロバイダはOAuth認証と認証によって使用できるようにサービスを提供します。 コンシューマはユーザがOAuth認証を使って使用するサービスを提供します。 ユーザはコンシューマのサービスのアクセスを許可したり、許可を解除したりします。OAuthの流れ1.コンシューマがサービスプロバイダからOAuthの利用申請をする。 Consumer Key や Consumer Secret をサービスプロバイダから取得する。 2.ユーザがコンシューマのサービスにサービスプロバイダから 使用する権限を取得するよう要求する。 3.コンシューマがバックグラウンドでリクエストトークンを取得する。 ※先に4のフローに移行するサービスもあるようです。 4.コンシューマはサービスプロバイダに未認可のリクエストトークンを パラメータに載せてリダイレクトさせる。 5.ユーザがサービスプロバイダにてアクセス権の委譲を許可する。 この際未認可のリクエストトークンをサービスプロバイダが許可済みにする。 6.サービスプロバイダがユーザをコンシューマへとリダイレクトさせる。 7.コンシューマが認可済みのリクエストトークンを使いバックグラウンドで アクセストークンを取得する。 8.コンシューマがアクセストークンを使いOAuthにより提供されている サービス情報にアクセスする。 終わり
2011/12/20
【プログラミング】if else の条件分岐についてのお話
最近会社で話題にのぼるif elseの条件分岐についてちょっと書いてみようと思います。 うちの会社ではこれといったコーディング規約などはなくみんながみんなバラバラに書いて います。 最近になってそのことが議題に上がるようになりました。 みんなスタイルがバラバラなのでコードの可読性が低かったりしますので そういうことをなくそうという事です。 今回は議題にif else の条件分岐について上がったのでメモしておきます。 if文でエラーかどうかのチェックを行い条件を分ける場合なのですが、 例1)if (条件) { // 成功時の処理 // 成功時の処理 // 成功時の処理 // 成功時の処理 // 成功時の処理 } else { // エラー処理 }例2)if (条件) { // エラー処理 } // 成功時の処理 // 成功時の処理 // 成功時の処理 // 成功時の処理 // 成功時の処理大体上記の2通りに別れるのですが、可読性はどう見ても 例2) の方です。 そもそも余計なelseがいらないです。 それに比べて 例1 の場合はエラー処理が下により過ぎていて下まで読みに行くのが 少し面倒です。 そういった点を踏まえ今回より 例2) を採用するようになりました。
2011/12/16
【PHP】PHPで閉じタグを書かないお話
学校では必ずphpの閉じタグ 「?>」 を書いていましたが、 いざ就職して現場に出ると綴じタグを書いていないコードに遭遇しました。 それでなんで・・・?と思ったのでその時に調べたメモです。 phpでは閉じタグを書かないことで閉じタグ以降に記述されているスペースや改行などを 出力しないように出来ます。 どういうことかというと 下記の様なコードが合ったとします。 下記のコードは実行されると文字列で「test」と出力されます。<?php ?> testこのような感じでSmartyなどのテンプレートエンジンを使うと 「test」と出力された後にテンプレートが表示されます。 つまりゴミが出てしまうわけですね。 上記コードのように「test」という文字列でなくても改行だけやスペースのみの場合でも ゴミとしてテンプレートと一緒に出力されてしまいます。 ゴミを出力させないために閉じタグ 「?>」 を書かないようにするという事でした。 これから習慣付けていこうと思います。 終わり
2011/10/25
【プログラミング】WHERE 1 = 1 って?
タイトル通りです。 学校を出てからというものたまにSQLを組み立てている箇所に遭遇します。 そこで、「WHERE 1 = 1」という記述に度々出会います。 大抵が複数条件のSQL文を構築している箇所なのですが、なぜ「WHERE 1 = 1」という 記述があるのか、前々から不思議でした。 ですので、少し時間があったので調べて見ました。 まず、「WHERE 1 = 1」はすべての条件が 「true」 になります。 何があっても通るよってことですね。 次にループでクエリを追加するブロックがあります。 そこでは、下記のようにWHERE句に条件が追加されています。 こんな感じのやつですね。<?php $param = array( 'id' => 1, 'name' => 'test', ); $sql = sql($param); function sql($param) { $sql = 'SELECT'; $sql .= ' *'; $sql .= 'FROM'; $sql .= ' EMP'; $sql .= 'WHERE'; $sql .= ' 1 = 1'; foreach ($param as $key => $val) { $sql .= 'AND'; $sql ,= $key . " = '" . $val . "'": } return $sql; }するとこのようなSQLが出来上がると思います。SELECT * FROM EMP WHERE 1 = 1 AND id = '1' AND name = 'test'これだとただ単にSQL文が出来上がるだけなのですが、 この記述方法のいいところは別にあります。 それは、WHERE句が複数か、ひとつしか無い場合です。 この場合、通常ならWHERE句のパラメータのある無しを判定し、一つめのWHERE句と 一つめ以降のWHERE句で処理をわけなければなりません。 ですが、上の関数のように「WHERE 1 = 1」の記述をしておくだけで そういったパラメータの確認などのブロックが必要なくなるのです。 なんて便利 そもそも生のクエリを投げること自体少ないですが、このような記述方法がわかっていれば 複数の条件があったりなかったりする場合に重宝しそうですね。 終わり
登録:
投稿 (Atom)
