ここがすごい! なぞとphp5.3
TRANSCRIPT
ここがすごい!
なぞとPHP5.3
佐藤琢哉
LOCAL PHP部
はじめに
なぞはすごく
ないです!!!
自己紹介
• 佐藤琢哉 aka nazo
• 旭川→東京→札幌
• LOCAL PHP部
• Hatena : nazone
• twitter : 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で一応作れたが、非常に面倒だった
• クロージャ:無名(に限らないが)関数内の変数を解決するときに、その関数が定義されたスコープでの変数を参照する仕組み
Phar
• PHPのソースを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
<?php
namespace app\models;
class Post extends \lithium\data\Model {
}
app/controllers/PostsController.php
<?php
namespace 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.php
• viewではshort_open_tagの設定に限らず、<?=$foo?>書式が使える– なんと自動でHTMLエスケープ機能付き
– ちなみにエスケープされたくない場合は<?php echo $foo ?>
– なぜかHelperは自動エスケープされない不思議
– nl2brは普通にやるしかない(と思う)
CRUDを作ってみる
Model
• Model周りはそこまで調べてないので省略
• namespaceで使うモデルを定義
– 別にしなくても使えるけど定義したほうが楽
Helper
• Helperは$thisから参照すること
– $this->html->link(...)
まとめ
まとめ
• lithiumは開発がもりもり進んでいるので、そのうち実用的になる– その日に向けて勉強しておくのはいいかも
– 今はまだ実用は厳しいかも(ドキュメントが少なすぎ)
• lithiumが出てきたらPHP5.3が本番!という感じがする– 他に使う理由があまり無い
– 追加機能は便利ではあるが…
おわり