Contenu connexe Plus de ke-m kamekoopa (16) Php5.46. 3 月 1 日に PHP5.4 がリリースされたよ!
●
新機能追加!
●
便利な新文法!
●
パフォーマンスアップ!
ニュースリリース
http://www.php.net/archive/2012.php#id2012-03-01-1
7. 例えば…
●
trait
●
ビルトインサーバ
●
配列のデリファレンス
●
配列の短縮定義記法
●
コンストラクタから直接メンバにアクセス
●
session_set_save_handler() のオブジェクト指向
インタフェース
などなど…。
詳しくは http://php.net/ChangeLog-5.php を参照
8. trait
●
振る舞いの再利用
●
継承でもインタフェースでもない再利用の第三の形
●
メソッド本体とプロパティを含めることが出来る
●
継承ツリーに縛られず振る舞いだけを追加することが出来る!
●
ただし、型システムとしては働かない…
9. ハトとタイとペンギンの話
●
ハトは鳥
class Hato extends Tori{...}
●
タイは魚なので泳げる
class Tai extends Sakana{ public function swim(){...}}
●
ペンギンは鳥…だけど泳げる
class Penguin extends Tori { public function swim(){...}}
泳ぐという振る舞いは共通なのに
鳥と魚では継承ツリーが異なるので再利用はできない
インタフェースを利用しても中身の実装はコピペするしかない…。
11. e.g) 泳ぐ trait
trait Swimable{
protected $swimSpeed;
public function setSwimSpeed($speed){
$this->swimSpeed = $speed;
}
public function swim(){
// 泳ぐ処理
}
}
12. e.g) 泳ぐ trait
class Hato extends Tori {
}
class Tai extends Sakana {
use Swimable;
}
class Penguin extends Tori{
use Swimable;
}
泳ぐ、という振る舞いを継承ツリーに縛られずに再利用できる!
13. ビルトインサーバ
●
php を -S オプション付きで実行するとビルトインサーバが
起動する
e.g) php -S localhost:8080
●
コマンドを実行したディレクトリがドキュメントルートに
●
-t オプションで任意の場所に設定することも可能
●
mod_rewrite は使えない…が、リクエストに「 . 」が含ま
れておらず、存在しないファイルだった場合 index.php
が自動で起動する
14. ビルトインサーバ
●
vhost 設定をしなくても簡単にアプリをテストできる!
●
mod_rewrite が使えないなど制限はある。
●
ルータスクリプトを指定して実行すれば、 index.php から
始まらない fw でも動かせる!
16. 配列の短縮定義
●
PHP の配列といえば
array(
array(
array(
array( …
あっっらっらっっっっらっっry
17. 配列の短縮定義
●
使いやすいのでついつい多用しがち
●
その割には都度「 array 」面倒
●
コードの可視性が悪くなる上に何かダサい
PHP5.4 からは [] で定義可能!
18. e.g)
$array = [
0,
1,
“key1” => [
“key1_1” => “value1_1”,
],
“key2” => [
“key2_2” => [1,2,3,4],
],
];
19. 配列のデリファレンス
●
参照の指す値を取り出すこと
●
今までは一旦一時変数へ取り出して要素にア
クセスする必要が。
$_tmp = get_ids();
$id = $_tmp[0];
●
あると思います
20. 配列のデリファレンス
●
関数やメソッドが配列を返す時、直接添え字で
アクセスできる!
$id = get_ids()[0];
●
地味に便利!
●
ただし、存在しない要素へのアクセスは今まで
通り Notice が出るので注意
21. コンストラクタからメンバへのアクセス
●
コンストラクタでインスタンスを一旦変数に取り
出し、何らかの設定をして利用する
$hoge = new Hoge();
$hoge->setMessage(“message”);
$hugo->setHoge($hoge);
●
あると思います。
22. コンストラクタからメンバへのアクセス
●
新文法ならコンストラクタから直接メンバへアク
セスする事が出来る!
(new Hoge())->setMessage(“message”);
●
地味に便利 part2 !
●
Propel で Criteria 利用する時とか便利
23. session_set_save_handler() の
オブジェクト指向インタフェース
●
session_set_save_handler() って?
– php が内部的に用いるセッション保存関数をユーザ定
義のモノに置き換える
– files, sqlite, memcache 以外のセッション実装を自由
に利用可能
●
php5.3 までは非 OOP な IF
– セッション処理に必要な 6 つの関数をコールバックで指
定する IF
●
php5.4 からは OOP な IF が追加されて使いやすく!
24. session_set_save_handler() の
オブジェクト指向インタフェース
●
before
session_set_save_handler ( callback $open , callback
$close , callback $read , callback $write , callback
$destroy , callback $gc )
●
after
session_set_save_handler ( SessionHandlerInterface
$sessionhandler [, bool $register_shutdown = true ] )
25. session_set_save_handler() の
オブジェクト指向インタフェース
●
SessionHandlerInterface
php5.4 から導入されたインタフェースで、これを実装したクラス
は session_set_save_handler に設定することが出来る。
●
SessionHandler
SessionHandlerInterface を実装した、 php が内部で利用して
いるクラス。 session.save_handler で定義されている内部
セッションハンドラをラップしている。
このクラスを拡張して設定することで、現在設定されている内部
セッションハンドラの処理の一部を横取りすることが出来る。
27. まとめ
●
trait で再利用性の高いコードが書ける!
●
ビルトインサーバでかんたん実行環境!
●
新文法でさくさく書ける!
●
セッションハンドリングがより便利に!
他にもいろいろあるので試してみてね!