ここがすごい!なぞとPHP5.3 佐藤琢哉LOCAL PHP部
はじめに
なぞはすごくないです!!!
自己紹介佐藤琢哉 aka nazo旭川->東京->札幌LOCAL PHP部Hatena : nazonetwitter : nazo
アジェンダPHP5.3おさらいlithiumについて
PHP5.3おさらい
何が変わった5.3?名前空間staticメソッドに関する追加機能goto無名関数Pharその他細かい変更
名前空間¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥名前空間を解決するための仕組みnamespaceで囲むuseで宣言すると省略できる
staticメソッドに関する追加機能遅延静的束縛(late static binding)呼び出し方法によって実行するメソッドを実行時に切り替える動的静的呼び出し(Dynamic Static Call)$a::foo();なぜ今までできなかったのかが謎__callStatic__callのstatic版O/Rマッパーとかで効果が出てくると思われる?
goto使うな!!!
無名関数(lambda)JavaScriptやってる人ならおなじみ無名関数≠クロージャ(よく間違えられる)lambdaと呼ぶのはLisp方面が元ネタらしい従来create_functionで一応作れたが、非常に面倒だったクロージャ:無名(に限らないが)関数内の変数を解決するときに、その関数が定義されたスコープでの変数を参照する仕組み
PharPHPのソースをtarとかzipで固めて、それをそのままPHPからincludeできるようにする仕組みPythonのeggみたいなやつ(?)
細かい変更公式のドキュメントを読めば何が非推奨かとか書いてあるから、ある程度はそこをチェックしながら微妙に互換性のない修正もあるので、なんか変だと思ったらチェックしてみようPHP5な書き方をしていればそこまで変にはならない
インストール基本的にソースから入れるのがいいWindowsならXAMPPを入れれば最初から5.3になるでも5.3メインで開発することはまだ少ない気がするdebian、ubuntu系ならdotdebにパッケージがある(が、入れると当然5.2は消える)
インストール5.3.2はビルド時にSEGVを出すバグがあるっぽいので、5.3.1を入れたほうがいいかも(詳細不明)http://bugs.php.net/bug.php?id=51216
lithiumについて
lithiumってなに?PHP5.3専用フレームワークCakePHPを作っていたGarrett WoodworthとかNate Abeleとかって人がCakePHPプロジェクトから離脱して作り始めたCakePHPっぽさが随所に残っているまだ正式版ではないhttp://rad-dev.org/
主な特徴PHP5.3専用MongoDBなどのDBにも対応(むしろ推奨している印象)CakePHPっぽく書けるが先進的な機能も豊富フィルタ機能で好きなところを改造できる
ダウンロードインストール
ダウンロードhttp://rad-dev.org/lithium/wiki/drafts/blog-tutorialを参考にここで見るとMongoDBを使っているが、今回はMySQLで行うhttp://rad-dev.org/lithium/versionsからダウンロードして解凍
初期設定フォルダ構成はCakePHPそっくり若干違う箇所もあるがURLがルートでない場合はCakePHP同様.htaccessでRewriteBaseを設定app/resourcesをwritableにするconfig/bootstrap.phpのconnections.phpをrequireしてるところのコメントアウトを解除config/connections.phpを編集DB設定
テーブルcreate table posts (  id integer unsigned not null auto_increment,  title varchar(255),  body text,  primary key(id));
MVC作成
app/models/Post.php<?phpnamespace app\models;class Post extends \lithium\data\Model {}
app/controllers/PostsController.php<?phpnamespace app\controllers;class PostsController extends \lithium\action\Controller {}
app/views/posts/index.html.php(普通のHTML)
MVC作成controllerからviewに値を渡すには、controllerでkey=>valueの形式でreturnするcompactを使うのがおすすめ
MVC作成viewの拡張子は.html.phpviewではshort_open_tagの設定に限らず、<?=$foo?>書式が使えるなんと自動でHTMLエスケープ機能付きちなみにエスケープされたくない場合は<?php echo $foo?>なぜかHelperは自動エスケープされない不思議nl2brは普通にやるしかない(と思う)
CRUDを作ってみる
ModelModel周りはそこまで調べてないので省略namespaceで使うモデルを定義別にしなくても使えるけど定義したほうが楽
HelperHelperは$thisから参照すること$this->html->link(...)
まとめ
まとめlithiumは開発がもりもり進んでいるので、そのうち実用的になるその日に向けて勉強しておくのはいいかも今はまだ実用は厳しいかも(ドキュメントが少なすぎ)lithiumが出てきたらPHP5.3が本番!という感じがする他に使う理由があまり無い追加機能は便利ではあるが…
おわり

ここがすごい! なぞとPHP5.3