Top Banner
1 PHP5.4 勉勉勉 勉勉勉勉勉勉勉勉勉勉勉勉勉 勉勉 勉勉
30
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Php5 4勉強会

Copyright © CyberAgent .inc 2011 1

PHP5.4 勉強会

株式会社シーエーアドバンス大谷 祐司

Page 2: Php5 4勉強会

Copyright © CA ADvance .inc 2012 2

自己紹介

大谷 祐司(おおたに ゆうじ)--------------------------------------株式会社シーエー・アドバンス 技術責任者。技術大好き、プログラム大好きです。

山口県出身で、現在は東京在住。沖縄が大好きで毎月来ています。( ホテルとオフィスの往復がほとんどですが・・・ )

9 月で 32 歳になります。

Page 3: Php5 4勉強会

Copyright © CA ADvance .inc 2012 3

自己紹介

参加者の皆さんにも自己紹介してもらいましょう。

Page 4: Php5 4勉強会

Copyright © CA ADvance .inc 2012 4

自己紹介

シーエーアドバンスの社内勉強会を外部解放するというコンセプトで、今日の勉強会は企画されました。

弊社では、定期的に技術に関する勉強会を行っています。興味を持った方は、「エグジニアブログ」で検索してみてください。

Page 5: Php5 4勉強会

Copyright © CA ADvance .inc 2012 5

自己紹介

初めての試みですが、失敗を恐れずに頑張ります!皆さんにとって有意義な勉強会になれば幸いです。

Page 6: Php5 4勉強会

Copyright © CA ADvance .inc 2012 6

はじめに

■ 今日のテーマ

3 月に安定板がリリースされた PHP5.4 です。

Page 7: Php5 4勉強会

Copyright © CA ADvance .inc 2012 7

今日の内容

以下についてお話しします。

■PHP5.4 の新機能

■PHP5.3→5.4 のバージョンアップについて

■ 弊社のバージョンアップ事例

Page 8: Php5 4勉強会

Copyright © CA ADvance .inc 2012 8

今日の内容

PHP5.4 もう導入していますか?

Page 9: Php5 4勉強会

Copyright © CA ADvance .inc 2012 9

PHP5.4 の新機能

PHP5.4 開発時に、 PHP6 にするか検討したらしいです。

それくらい大きく変わっていました・・・

Page 10: Php5 4勉強会

Copyright © CA ADvance .inc 2012 10

PHP5.4 の新機能

新機能がたくさん・・・■ 配列をメソッドチェーンのように参照可能

■callable 配列をそのまま実行可能

■ クロージャの中で $this が使える

■Traits のサポート

■ 配列のシンタックスシュガー

■static メソッドの可変呼び出し

■callable が型ヒントに使える

■ コンストラクタからメソッドチェーンが実行可能

■ ビルトイン WEB サーバ

今日はこれらを、詳しく解説します。

Page 11: Php5 4勉強会

Copyright © CA ADvance .inc 2012 11

PHP5.4 の新機能

■ 配列をメソッドチェーンのように参照可能

PHP5.3 まではこう書く必要がありましたが、

$a = new A();$row = $a->foo();echo $row['name'];

PHP5.4 だとこう書けば OK です。

$a = new A();echo $a->foo()['name'];

Page 12: Php5 4勉強会

Copyright © CA ADvance .inc 2012 12

PHP5.4 の新機能

■ callable 配列をそのまま実行可能

callable 配列( array(‘class’, ‘method’) )をそのまま実行出来るようになりました。

$f = array('Foo','bar');echo $f('TEST');

Page 13: Php5 4勉強会

Copyright © CA ADvance .inc 2012 13

PHP5.4 の新機能

■ クロージャの中で $this が使える

php5.3 までは、「 Fatal error: Using $this when not in object context 」が出ましたが、 PHP5.4 では問題なく実行されます。

class A {private $value = ‘ 文字列 A';function single_getter($name) {

return function() use ($name) {return $this->$name;

};}}

Page 14: Php5 4勉強会

Copyright © CA ADvance .inc 2012 14

PHP5.4 の新機能

■Trait のサポート

・ Trait とは、クラスの継承関係に影響を与えずクラスに適用できるメソッドとプロパティの集合です。

・ trait 本体は、 class XXX のように trait XXX と作成します。呼び出す際は、クラス内で use XXX と宣言します。

Page 15: Php5 4勉強会

Copyright © CA ADvance .inc 2012 15

PHP5.4 の新機能

■Traits のサンプルコード

trait Hello {public function sayHelloWorld() {

echo 'Hello'.$this->getWorld();}abstract public function getWorld();

}class MyHelloWorld {

private $world;use Hello;public function getWorld() {

return $this->world;}public function setWorld($val) {

$this->world = $val;}}

Page 16: Php5 4勉強会

Copyright © CA ADvance .inc 2012 16

PHP5.4 の新機能

■ 配列のシンタックスシュガー

他の言語のように配列の簡単な初期化がサポートされます。

PHP5.3 まではこう書く必要がありましたが、$a = array('A', ‘B', ‘C');$b = array('A' =>‘contentsA', ‘B'=>‘contentsB', ‘C'=>‘contentsC');

PHP5.4 だとこう書けば OK です。$a = ['A', ‘B', ‘C'];$b = ['A' => ‘contentsA',   ‘ B' => ‘contentsB',   ‘ C' => ‘contentsC'];

Page 17: Php5 4勉強会

Copyright © CA ADvance .inc 2012 17

PHP5.4 の新機能

■ static メソッドの可変呼び出し

波括弧を使い static メソッドの呼び出しを可変に出来ます。

class StaticClass {   public static function getName() {     return ‘ 名前 ';   }}$method = 'getName';echo StaticClass::{$method}(); // 「名前」と表示される。

Page 18: Php5 4勉強会

Copyright © CA ADvance .inc 2012 18

PHP5.4 の新機能

■ callable が型ヒントに使える

function hi(callable $f) {   echo $f();}class Human{   public function hello() {     return “ 文字1 ";   }}hi([new Human(), ‘hello’]); // 「文字1」が表示される。

$songName = function() {   return “ 文字2 ";};hi($songName); // 「文字2」が表示される。

Page 19: Php5 4勉強会

Copyright © CA ADvance .inc 2012 19

PHP5.4 の新機能

■ コンストラクタからメソッドチェーンが実行可能

class Human{   function __construct($name) {     $this->name = $name;   }   public function hello()   {     return "Hi " . $this->name;   }}

// 古い方法$human = new Human(“ 文字 1");echo $human->hello();

// 新しい方法echo (new Human(" 文字 1"))->hello();

Page 20: Php5 4勉強会

Copyright © CA ADvance .inc 2012 20

PHP5.4 の新機能

■ ビルトイン Web サーバ

PHP だけで Web サービスを提供できる機能です。起動したディレクトリが ドキュメントルートになります。 Apache が持っている SSI などの機能は使えず、飽くまで PHP を試すためのものです。

Page 21: Php5 4勉強会

Copyright © CA ADvance .inc 2012 21

PHP5.4 の新機能

かなりたくさんありましたね。覚えるのが大変そうです・・・

便利な機能も多いので、使いこなせるようになりたいですね!

Page 22: Php5 4勉強会

Copyright © CA ADvance .inc 2012 22

PHP5.4 の新機能

次は PHP5.3→5.4 のバージョンアップについて見ていきましょう。

Page 23: Php5 4勉強会

Copyright © CA ADvance .inc 2012 23

PHP5.3→5.4 のバージョンアップについて

■ とりあえず移行ガイドを見てみる。http://php.net/manual/ja/migration54.php

PHP 5.4.x で改良された点のほどんどは、既存のコードに影響を及ぼしません。

→おぉ、素晴らしい!!

Page 24: Php5 4勉強会

Copyright © CA ADvance .inc 2012 24

PHP5.3→5.4 のバージョンアップについて

移行ガイドを見てみると、下位互換性のない変更点がたくさんあります・・・

http://www.php.net/manual/ja/migration54.incompatible.php

セーフモード をサポートしなくなりました。セーフモードでの動作を前提とするアプリケーションは、 セキュリティに関する調整が必要となります。 ■ マジッククォート が削除されました。 この機能に依存するアプリケーションは、依存しないように修正しないとセキュリティの問題が発生します。 get_magic_quotes_gpc() と get_magic_quotes_runtime() は常に FALSE を返すようになりました。 set_magic_quotes_runtime() を実行すると E_CORE_ERROR が発生します。 ■ini 設定 register_globals と register_long_arrays が削除されました。 ■ 呼び出し時の参照渡しをサポートしなくなりました。 ■break と continueへの引数として、変数は使えなくなりました。つまり、 break 1 + foo() * $bar; などとは書けなくなったということです。 静的な引数を使うのはもちろん可能で、 break 2; などは使えます。 この変更の副作用として、 break 0; や continue 0; が使えなくなりました。 ■Date 拡張モジュールにおいて、 TZ 環境変数によるタイムゾーンの設定をサポートしなくなりました。 php.ini 設定 date.timezone あるいは date_default_timezone_set() 関数でタイムゾーンを指定しなければなりません。 デフォルトのタイムゾーンが設定されていない場合に推測することがなくなり、 未設定の場合は常に "UTC" とみなして E_WARNING を発生させるようになりました。 ■$a が文字列の場合に非数値のオフセット ( たとえば $a['foo']) を指定したときの isset() の返り値は false 、 そして empty() の返り値は true となりました。 そして同時に E_WARNING が発生します。オフセットに double や bool そして null を指定した場合は E_NOTICE が発生します。数値とみなせる文字列を渡した場合 ($a['2'] など ) の挙動はこれまでと変わりません。 '12.3' や '5 foobar' のようなオフセットは非数値とみなされて E_WARNING が発生しますが、過去との互換性のためにそれぞれ 12 および 5 に変換されることに注意しましょう。 次のようなコードの返す値が変わります。 $str='abc';var_dump(isset($str['x'])); // PHP 5.4 以降では false 、 5.3 以前のバージョンでは true ■ 配列を文字列に変換しようとすると E_NOTICE が発生するようになりました。 キャストの結果は "Array" で、以前と変わりません。 ■NULL 、 FALSE あるいは空文字列にプロパティを追加してオブジェクトに変換しようとすると、 これまでのような E_STRICT エラーではなく warning が発生するようになりました。 ■ スーパーグローバルをパラメータ名として使うと fatal error となります。つまり function foo($_GET, $_POST) {} などのコードは使えなくなります。 ■ハッシュアルゴリズム Salsa10 および Salsa20 が削除されました。 ■array_combine() のパラメータとして空の配列を二つ指定したときの返り値が FALSE ではなく array() となりました。 ■htmlentities() は、アジアの文字に対して使ったときに E_STRICT を発行するようになりました。この場合の htmlentities() の挙動が htmlspecialchars() ( こちらは以前からそうなっていた ) と同じになりました。

Page 25: Php5 4勉強会

Copyright © CA ADvance .inc 2012 25

PHP5.3→5.4 のバージョンアップについて

特にやばそうなもの。

■ 呼び出し時の参照渡しをサポートしなくなりました。

■$a が文字列の場合に非数値のオフセット ( たとえば $a['foo']) を指定したときの isset() の返り値は false 、 そして empty() の返り値は true となりました。 そして同時に E_WARNING が発生します。

■ 配列を文字列に変換しようとすると E_NOTICE が発生するようになりました。 キャストの結果は "Array" で、以前と変わりません。

■NULL 、 FALSE あるいは空文字列にプロパティを追加してオブジェクトに変換しようとすると、 これまでのような E_STRICT エラーではなく warning が発生するようになりました。

Page 26: Php5 4勉強会

Copyright © CA ADvance .inc 2012 26

PHP5.3→5.4 のバージョンアップについて

シーエーアドバンスでも PHP5.4 に取り組もうとしました。

対象は、インターネット広告運用のプラットフォーム。オレオレフレームワークです。

Page 27: Php5 4勉強会

Copyright © CA ADvance .inc 2012 27

PHP5.3→5.4 のバージョンアップについて

広告運用プラットフォーム→オレオレフレームワーク。

参照渡しがたくさん→気合いで修正。Depricated がたくさん→とりあえず無視。

何とか動くようになったと思ったら・・・

Page 28: Php5 4勉強会

Copyright © CA ADvance .inc 2012 28

PHP5.3→5.4 のバージョンアップについて

開発機 ( ローカル Windows) の memcache が動かない・・・PHP5.4版の php_memcache.dll をネットで探すも見つからず。

→バージョンアップは一旦断念。 残念!!!!!

Page 29: Php5 4勉強会

Copyright © CA ADvance .inc 2012 29

総括

許されるなら、早く PHP5.4 に切り替えた方が良いと思います。

・大幅なメモリ使用量の削減(43%削減されるというデータがあるそうです )

・実行速度の UP( あるテストでは、 25%高速化されているという結果も )

・新機能を使うことによる、コード量の削減→見やすいコードに

などなど、新しいものには素晴らしい部分がたくさんあります。

Page 30: Php5 4勉強会

Copyright © CA ADvance .inc 2012 30

ご清聴ありがとうございました。