2013.09.12
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ
ごきげんよう。
最近は新しいフレームワークやJSフレームワークに四苦八苦しているわたくしです。
勉強がタリンです。もう一度基礎からぶち込まないと先には進めそうにありません。
加えて、会社の出来る先輩方が勇退するとの事で少々寂しい日々を送っております。
そんな中、相変わらずfuelphpって良いよね♪っていうお話をしようかなと。
しかしまずは、そもそも初心者の自分に師匠が教えてくれたプログラミングの原理的な部分(一気にじゃなくて徐々に教えてくれた)をご紹介してから、お気に入りの機能を2つ位ご紹介しようと思います。
・プログラミングは無駄な処理を入れず必要最小限のコードで書く
・同じ処理を何度も書かない
・他の人が見てもどういう処理がしてあるか分かるようにコメントをしっかり書く
・パフォーマンスを意識して、SQL(データベースうんぬん)を書く
・フレームワークの機能に頼り過ぎない
・テスト・チェックは特にしっかりやる
・様々なソースコードに触れる
ふむふむ、勉強になりますね。どれも大切な心得的な文言ですね。
さて、特に注目して欲しいのは5つ目の『フレームワークの機能に頼り過ぎない』という部分です。
その心は、フレームワークはあくまでPHPの補助的な役割である、という事です。
実はわたくし、裸のPHPは殆ど触れたことがございません。
(※一度だけ、しかも少しだけ実務で触れたことがある)
えっと、きっとですが、勿論フレームワーク独自のメソッドや機能でカバーできない部分は多々あるのですが、それを含めても師匠のおっしゃっていた7つの原理思想にフレームワークを使用することにより近づけると思うのです。
フレームワークには既存の機能を拡張し、独自の機能に変貌させられます。また、元々のmySQLだと面倒なデータの引っ張り出し方も簡単な書き方で取得可能です。
今回は分かりやすく、fuelphpの「拡張」と「独自クエリ」の2つに絞って解説します~。
※拡張に関しては、あくまでも「方法」であって「fuelphpだけが出来る」というものではありません。
※独自クエリはfuelphpにも書いてあるし師匠が見つけてきたのですが、たまたまテクログの順番が回ってきたので。
【その壱】拡張について
//ファイル:fuel/core/classes/apple.php
class Apple
{
public static function iphone
{
return "iphone4s!!";
}
}
こんなコードがあったとします。
iphone4sとかもう古いよ、2機種前じゃん。
そういう時にこのファイルを書き換えるのではなく、
//ファイル:fuel/spp/classes/my/apple.php
class My_Apple extends FuelCoreApple
{
public static function iphone
{
return "iphone5s!!";
}
}
という風にcoreファイル(※心臓部、ここのコードは基本変えてはいけない)を弄らずに、extendsすることにより「拡張」が出来るのです。
※class名は違ってても動くよ!
実務では本当によく使うので皆様お馴染みかと思うのですが、最近ではページング機能で独自な作りを拡張したり、ログイン認証の部分を拡張したり、お世話になっています。
【その弐】fuelphp独自のクエリビルダ
例えば、あるテーブルのカラムが100項目くらいあった時に、「5項目以外全て取り出したい!」と思うことも多々あるはずですが、MYSQLにはそのような構文がありません。
※本当にこれをしたかったら、95項目全て書かなくてはいけないという地獄……
しかし、fuelphpにはあったのです。しかも普通にマニュアルに載ってたし。
(※ormパッケージver,1.6~)
// 全項目選択
$entry = Model_Article::find("all");
// "date"と"name" カラム以外のすべてのカラムを選択
$entry = Model_Article::find("all", array("select" => array(array("date" => false), array("name" => false))));
// 同上
$entry = Model_Article::query()->select(array("date" => false), array("name" => false))->get();
// ※参考url:http://fuelphp.jp/docs/1.6/packages/orm/crud.html
こんな感じに。
これ結構個人的に使えると思うんです。探せば他のフレームワークにもあるかもね!
また、fuelphpクエリビルダにはRAND()が見つからなくて、出来ないのかなぁとか思ってたんだけど、こんな風にしたら出来ました。
$query = DB::select("id")->from("entries");
$query->order_by(DB::expr("RAND()"));
$entry = $query->execute()->as_array();
order_byの中の『DB::expr()』がポイントですね。
これを使うとDB::expr()内の文字列をエスケープせずにそのままSQLとして出力してくれます。(※その為、注意も必要ですが)
これでfuelphpのクエリビルダでランダムの順番で取得が出来ました!
他にも沢山素敵な機能がfuelphpにはあります。
こんなものが一般市民の手に入る良い時代になったものです。
感謝しかありませんね。
てことでまた会う日まで~