SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
PHP5.4 をさわってみた




~trait も配列短縮定義も、あるんだよ ~
PHP5.4 をさわってみた




~trait も配列短縮定義も、あるんだよ ~
はじめに
何でもは知らないわよ。知ってることだけ。
気をとりなおして…
3 月 1 日に PHP5.4 がリリースされたよ!
●
    新機能追加!
●
    便利な新文法!
●
    パフォーマンスアップ!



ニュースリリース
http://www.php.net/archive/2012.php#id2012-03-01-1
例えば…
●
 trait
●
 ビルトインサーバ
●
 配列のデリファレンス
●
 配列の短縮定義記法
●
 コンストラクタから直接メンバにアクセス
●
 session_set_save_handler() のオブジェクト指向
インタフェース

などなど…。
詳しくは http://php.net/ChangeLog-5.php を参照
trait
●
    振る舞いの再利用
●
    継承でもインタフェースでもない再利用の第三の形
●
    メソッド本体とプロパティを含めることが出来る
●
    継承ツリーに縛られず振る舞いだけを追加することが出来る!


●
    ただし、型システムとしては働かない…
ハトとタイとペンギンの話
 ●
     ハトは鳥
class Hato extends Tori{...}
 ●
     タイは魚なので泳げる
class Tai extends Sakana{ public function swim(){...}}
 ●
     ペンギンは鳥…だけど泳げる
class Penguin extends Tori { public function swim(){...}}

泳ぐという振る舞いは共通なのに

鳥と魚では継承ツリーが異なるので再利用はできない

インタフェースを利用しても中身の実装はコピペするしかない…。
trait はこれを解決します!
e.g) 泳ぐ trait
trait Swimable{
    protected $swimSpeed;
    public function setSwimSpeed($speed){
        $this->swimSpeed = $speed;
    }
    public function swim(){
        // 泳ぐ処理
    }
}
e.g) 泳ぐ trait
class Hato extends Tori {
}
class Tai extends Sakana {
    use Swimable;
}
class Penguin extends Tori{
    use Swimable;
}



泳ぐ、という振る舞いを継承ツリーに縛られずに再利用できる!
ビルトインサーバ
●
    php を -S オプション付きで実行するとビルトインサーバが
      起動する
e.g) php -S localhost:8080
●
    コマンドを実行したディレクトリがドキュメントルートに
●
    -t オプションで任意の場所に設定することも可能
●
    mod_rewrite は使えない…が、リクエストに「 . 」が含ま
     れておらず、存在しないファイルだった場合 index.php
     が自動で起動する
ビルトインサーバ
●
    vhost 設定をしなくても簡単にアプリをテストできる!
●
    mod_rewrite が使えないなど制限はある。
●
    ルータスクリプトを指定して実行すれば、 index.php から
     始まらない fw でも動かせる!
配列の短縮定義
●
    PHP の配列といえば
array(
 array(
    array(
     array( …
あっっらっらっっっっらっっry
配列の短縮定義
●
    使いやすいのでついつい多用しがち
●
    その割には都度「 array 」面倒
●
    コードの可視性が悪くなる上に何かダサい


PHP5.4 からは [] で定義可能!
e.g)
$array = [
  0,
  1,
  “key1” => [
     “key1_1” => “value1_1”,
  ],
  “key2” => [
     “key2_2” => [1,2,3,4],
  ],
];
配列のデリファレンス
●
    参照の指す値を取り出すこと
●
    今までは一旦一時変数へ取り出して要素にア
     クセスする必要が。
$_tmp = get_ids();
$id = $_tmp[0];
●
    あると思います
配列のデリファレンス
●
    関数やメソッドが配列を返す時、直接添え字で
     アクセスできる!
$id = get_ids()[0];
●
    地味に便利!
●
    ただし、存在しない要素へのアクセスは今まで
     通り Notice が出るので注意
コンストラクタからメンバへのアクセス
●
    コンストラクタでインスタンスを一旦変数に取り
     出し、何らかの設定をして利用する
$hoge = new Hoge();
$hoge->setMessage(“message”);
$hugo->setHoge($hoge);
●
    あると思います。
コンストラクタからメンバへのアクセス
●
    新文法ならコンストラクタから直接メンバへアク
     セスする事が出来る!
(new Hoge())->setMessage(“message”);
●
    地味に便利 part2 !
●
    Propel で Criteria 利用する時とか便利
session_set_save_handler() の
  オブジェクト指向インタフェース
●
    session_set_save_handler() って?
       –   php が内部的に用いるセッション保存関数をユーザ定
             義のモノに置き換える
       –   files, sqlite, memcache 以外のセッション実装を自由
              に利用可能
●
    php5.3 までは非 OOP な IF
       –   セッション処理に必要な 6 つの関数をコールバックで指
            定する IF
●
    php5.4 からは OOP な IF が追加されて使いやすく!
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 ] )
session_set_save_handler() の
  オブジェクト指向インタフェース
●
    SessionHandlerInterface
php5.4 から導入されたインタフェースで、これを実装したクラス
  は session_set_save_handler に設定することが出来る。
●
    SessionHandler
SessionHandlerInterface を実装した、 php が内部で利用して
  いるクラス。 session.save_handler で定義されている内部
  セッションハンドラをラップしている。
このクラスを拡張して設定することで、現在設定されている内部
 セッションハンドラの処理の一部を横取りすることが出来る。
session_set_save_handler() の
  オブジェクト指向インタフェース
●
    あらかじめいくつかのセッション戦略を用意しておい
     て、動的かつ簡単に切り替えられる!
●
    例えば…。
     –   暗号化機能付きセッション
     –   GC 戦略だけを自前のものに変更
     –   場合や環境によってセッション戦略を切替え
     –   などなど…。
まとめ
●
    trait で再利用性の高いコードが書ける!
●
    ビルトインサーバでかんたん実行環境!
●
    新文法でさくさく書ける!
●
    セッションハンドリングがより便利に!


他にもいろいろあるので試してみてね!
おわり

Contenu connexe

Tendances

プログラミングの基礎振り返りスライド1
プログラミングの基礎振り返りスライド1プログラミングの基礎振り返りスライド1
プログラミングの基礎振り返りスライド1sunotora
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会Akihiko Matuura
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 
知って得するC#
知って得するC#知って得するC#
知って得するC#Shota Baba
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみようKentaro Matsui
 
Lisp batton - Common LISP
Lisp batton - Common LISPLisp batton - Common LISP
Lisp batton - Common LISPMasaomi CHIBA
 
templateとautoの型推論
templateとautoの型推論templateとautoの型推論
templateとautoの型推論MITSUNARI Shigeo
 
HashTable と HashDos
HashTable と HashDosHashTable と HashDos
HashTable と HashDosYuya Takeyama
 
Php5.5についてのメモ
Php5.5についてのメモPhp5.5についてのメモ
Php5.5についてのメモryuji inamoto
 
PHPでマルチスレッド
PHPでマルチスレッドPHPでマルチスレッド
PHPでマルチスレッドkarky7
 
ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)libpanda
 
DoActionからJava VMバイトコードに変換する話
DoActionからJava VMバイトコードに変換する話DoActionからJava VMバイトコードに変換する話
DoActionからJava VMバイトコードに変換する話emorins
 
Doma SQLテンプレートのしくみ
Doma SQLテンプレートのしくみDoma SQLテンプレートのしくみ
Doma SQLテンプレートのしくみToshihiro Nakamura
 
Kanazawa.js.Next
Kanazawa.js.NextKanazawa.js.Next
Kanazawa.js.Nextdynamis
 
テスト事始め phpblt #3
テスト事始め phpblt #3テスト事始め phpblt #3
テスト事始め phpblt #3rittyan
 
詳説ぺちぺち
詳説ぺちぺち詳説ぺちぺち
詳説ぺちぺちdo_aki
 

Tendances (20)

プログラミングの基礎振り返りスライド1
プログラミングの基礎振り返りスライド1プログラミングの基礎振り返りスライド1
プログラミングの基礎振り返りスライド1
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
知って得するC#
知って得するC#知って得するC#
知って得するC#
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
 
Ruby test double
Ruby test doubleRuby test double
Ruby test double
 
Lisp batton - Common LISP
Lisp batton - Common LISPLisp batton - Common LISP
Lisp batton - Common LISP
 
templateとautoの型推論
templateとautoの型推論templateとautoの型推論
templateとautoの型推論
 
HashTable と HashDos
HashTable と HashDosHashTable と HashDos
HashTable と HashDos
 
Php5.5についてのメモ
Php5.5についてのメモPhp5.5についてのメモ
Php5.5についてのメモ
 
PHPでマルチスレッド
PHPでマルチスレッドPHPでマルチスレッド
PHPでマルチスレッド
 
ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)
 
DoActionからJava VMバイトコードに変換する話
DoActionからJava VMバイトコードに変換する話DoActionからJava VMバイトコードに変換する話
DoActionからJava VMバイトコードに変換する話
 
Python02
Python02Python02
Python02
 
Doma SQLテンプレートのしくみ
Doma SQLテンプレートのしくみDoma SQLテンプレートのしくみ
Doma SQLテンプレートのしくみ
 
Kanazawa.js.Next
Kanazawa.js.NextKanazawa.js.Next
Kanazawa.js.Next
 
テスト事始め phpblt #3
テスト事始め phpblt #3テスト事始め phpblt #3
テスト事始め phpblt #3
 
詳説ぺちぺち
詳説ぺちぺち詳説ぺちぺち
詳説ぺちぺち
 
R spec勉強会
R spec勉強会R spec勉強会
R spec勉強会
 
Perl勉強会#2資料
Perl勉強会#2資料Perl勉強会#2資料
Perl勉強会#2資料
 

Similaire à Php5.4

PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会Yuji Otani
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)Rui Hirokawa
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1kenjis
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12kenjis
 
php7's ast
php7's astphp7's ast
php7's astdo_aki
 
FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1Fumito Mizuno
 
Php in ruby
Php in rubyPhp in ruby
Php in rubydo_aki
 
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥Insight Technology, Inc.
 
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoyakenjis
 
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニック
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニックWordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニック
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニックTakashi Uemura
 
PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようYuya Takeyama
 
PHP4の今 ~日本語対応と最近のトピックス~
PHP4の今 ~日本語対応と最近のトピックス~PHP4の今 ~日本語対応と最近のトピックス~
PHP4の今 ~日本語対応と最近のトピックス~Rui Hirokawa
 
PHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxPHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxHideo Kashioka
 
php and sapi and zendengine2 and...
php and sapi and zendengine2 and...php and sapi and zendengine2 and...
php and sapi and zendengine2 and...do_aki
 
OSS開発勉強会-03
OSS開発勉強会-03OSS開発勉強会-03
OSS開発勉強会-03Kohei KaiGai
 
Javaクラスファイルの読み方
Javaクラスファイルの読み方Javaクラスファイルの読み方
Javaクラスファイルの読み方y torazuka
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925龍一 田中
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniterYuya Matsushima
 

Similaire à Php5.4 (20)

PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 
php7's ast
php7's astphp7's ast
php7's ast
 
FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
 
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう  by SRA OSS, Inc. 日本支社 高塚遥
[db tech showcase Tokyo 2014] B26: PostgreSQLを拡張してみよう by SRA OSS, Inc. 日本支社 高塚遥
 
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニック
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニックWordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニック
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニック
 
PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めよう
 
PHP4の今 ~日本語対応と最近のトピックス~
PHP4の今 ~日本語対応と最近のトピックス~PHP4の今 ~日本語対応と最近のトピックス~
PHP4の今 ~日本語対応と最近のトピックス~
 
PHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxPHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptx
 
Chef
ChefChef
Chef
 
php and sapi and zendengine2 and...
php and sapi and zendengine2 and...php and sapi and zendengine2 and...
php and sapi and zendengine2 and...
 
OSS開発勉強会-03
OSS開発勉強会-03OSS開発勉強会-03
OSS開発勉強会-03
 
Javaクラスファイルの読み方
Javaクラスファイルの読み方Javaクラスファイルの読み方
Javaクラスファイルの読み方
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925
 
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
 

Plus de ke-m kamekoopa

SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリーSQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリーke-m kamekoopa
 
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークSQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークke-m kamekoopa
 
設計してますか?
設計してますか?設計してますか?
設計してますか?ke-m kamekoopa
 
Interlli jとplayとjavaとscala
Interlli jとplayとjavaとscalaInterlli jとplayとjavaとscala
Interlli jとplayとjavaとscalake-m kamekoopa
 
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしいke-m kamekoopa
 
デプロイツールFabric
デプロイツールFabricデプロイツールFabric
デプロイツールFabricke-m kamekoopa
 
Playで作るwebsocketサーバ
Playで作るwebsocketサーバPlayで作るwebsocketサーバ
Playで作るwebsocketサーバke-m kamekoopa
 
デプロイメントパイプラインって何?
デプロイメントパイプラインって何?デプロイメントパイプラインって何?
デプロイメントパイプラインって何?ke-m kamekoopa
 
継続的にデリバリーって何?
継続的にデリバリーって何?継続的にデリバリーって何?
継続的にデリバリーって何?ke-m kamekoopa
 
Play frameworkをエヴァンジェる
Play frameworkをエヴァンジェるPlay frameworkをエヴァンジェる
Play frameworkをエヴァンジェるke-m kamekoopa
 

Plus de ke-m kamekoopa (16)

Kvwatcher
KvwatcherKvwatcher
Kvwatcher
 
PyKon JP 2014
PyKon JP 2014PyKon JP 2014
PyKon JP 2014
 
Scala.js
Scala.jsScala.js
Scala.js
 
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリーSQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
 
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークSQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォーク
 
設計してますか?
設計してますか?設計してますか?
設計してますか?
 
Interlli jとplayとjavaとscala
Interlli jとplayとjavaとscalaInterlli jとplayとjavaとscala
Interlli jとplayとjavaとscala
 
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
 
デプロイツールFabric
デプロイツールFabricデプロイツールFabric
デプロイツールFabric
 
Playで作るwebsocketサーバ
Playで作るwebsocketサーバPlayで作るwebsocketサーバ
Playで作るwebsocketサーバ
 
ぎっとの「ぎ」
ぎっとの「ぎ」ぎっとの「ぎ」
ぎっとの「ぎ」
 
# Rabbitサンプル
# Rabbitサンプル# Rabbitサンプル
# Rabbitサンプル
 
デプロイメントパイプラインって何?
デプロイメントパイプラインって何?デプロイメントパイプラインって何?
デプロイメントパイプラインって何?
 
継続的にデリバリーって何?
継続的にデリバリーって何?継続的にデリバリーって何?
継続的にデリバリーって何?
 
Play frameworkをエヴァンジェる
Play frameworkをエヴァンジェるPlay frameworkをエヴァンジェる
Play frameworkをエヴァンジェる
 
Test
TestTest
Test
 

Php5.4

  • 6. 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 でも動かせる!
  • 15.
  • 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 で定義されている内部 セッションハンドラをラップしている。 このクラスを拡張して設定することで、現在設定されている内部 セッションハンドラの処理の一部を横取りすることが出来る。
  • 26. session_set_save_handler() の   オブジェクト指向インタフェース ● あらかじめいくつかのセッション戦略を用意しておい て、動的かつ簡単に切り替えられる! ● 例えば…。 – 暗号化機能付きセッション – GC 戦略だけを自前のものに変更 – 場合や環境によってセッション戦略を切替え – などなど…。
  • 27. まとめ ● trait で再利用性の高いコードが書ける! ● ビルトインサーバでかんたん実行環境! ● 新文法でさくさく書ける! ● セッションハンドリングがより便利に! 他にもいろいろあるので試してみてね!