More Related Content
Similar to Php5 4勉強会 (20)
More from Yuji Otani (20)
Php5 4勉強会
- 1. PHP5.4勉強会
株式会社シーエーアドバンス
大谷 祐司
Copyright © CyberAgent .inc 2011 1
- 2. 自己紹介
大谷 祐司(おおたに ゆうじ)
--------------------------------------
株式会社シーエー・アドバンス 技術責任者。
技術大好き、プログラム大好きです。
山口県出身で、現在は東京在住。
沖縄が大好きで毎月来ています。
(ホテルとオフィスの往復がほとんどですが・・・)
9月で32歳になります。
Copyright © CA ADvance .inc 2012 2
- 3. 自己紹介
参加者の皆さんにも自己紹介してもらいましょう。
Copyright © CA ADvance .inc 2012 3
- 4. 自己紹介
シーエーアドバンスの社内勉強会を外部解放するというコン
セプトで、今日の勉強会は企画されました。
弊社では、定期的に技術に関する勉強会を行っています。
興味を持った方は、「エグジニアブログ」で検索してみ
てください。
Copyright © CA ADvance .inc 2012 4
- 5. 自己紹介
初めての試みですが、失敗を恐れずに頑張ります!
皆さんにとって有意義な勉強会になれば幸いです。
Copyright © CA ADvance .inc 2012 5
- 6. はじめに
■今日のテーマ
3月に安定板がリリースされたPHP5.4です。
Copyright © CA ADvance .inc 2012 6
- 7. 今日の内容
以下についてお話しします。
■PHP5.4の新機能
■PHP5.3→5.4のバージョンアップについて
■弊社のバージョンアップ事例
Copyright © CA ADvance .inc 2012 7
- 8. 今日の内容
PHP5.4 もう導入していますか?
Copyright © CA ADvance .inc 2012 8
- 9. PHP5.4の新機能
PHP5.4開発時に、PHP6にするか検討したらしいです。
それくらい大きく変わっていました・・・
Copyright © CA ADvance .inc 2012 9
- 10. PHP5.4の新機能
新機能がたくさん・・・
■配列をメソッドチェーンのように参照可能
■callable配列をそのまま実行可能
■クロージャの中で$thisが使える
■Traitsのサポート
■配列のシンタックスシュガー
■staticメソッドの可変呼び出し
■callableが型ヒントに使える
■コンストラクタからメソッドチェーンが実行可能
■ビルトインWEBサーバ
今日はこれらを、詳しく解説します。
Copyright © CA ADvance .inc 2012 10
- 11. PHP5.4の新機能
■配列をメソッドチェーンのように参照可能
PHP5.3まではこう書く必要がありましたが、
$a = new A();
$row = $a->foo();
echo $row['name'];
PHP5.4だとこう書けばOKです。
$a = new A();
echo $a->foo()['name'];
Copyright © CA ADvance .inc 2012 11
- 12. PHP5.4の新機能
■ callable配列をそのまま実行可能
callable配列( array(‘class’, ‘method’))を
そのまま実行出来るようになりました。
$f = array('Foo','bar');
echo $f('TEST');
Copyright © CA ADvance .inc 2012 12
- 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;
};
}
}
Copyright © CA ADvance .inc 2012 13
- 14. PHP5.4の新機能
■Traitのサポート
・Traitとは、クラスの継承関係に影響を与えずクラスに適用で
きるメソッドとプロパティの集合です。
・trait本体は、class XXXのように trait XXX と作成します。呼
び出す際は、クラス内で use XXX と宣言します。
Copyright © CA ADvance .inc 2012 14
- 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;
}
}
Copyright © CA ADvance .inc 2012 15
- 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'];
Copyright © CA ADvance .inc 2012 16
- 17. PHP5.4の新機能
■ staticメソッドの可変呼び出し
波括弧を使いstaticメソッドの呼び出しを可変に出来
ます。
class StaticClass {
public static function getName() {
return ‘名前';
}
}
$method = 'getName';
echo StaticClass::{$method}(); //「名前」と表示
される。
Copyright © CA ADvance .inc 2012 17
- 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」が表示される。
Copyright © CA ADvance .inc 2012 18
- 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();
Copyright © CA ADvance .inc 2012 19
- 20. PHP5.4の新機能
■ビルトインWebサーバ
PHPだけでWebサービスを提供できる機能です。起動し
たディレクトリが ドキュメントルートになります。
Apacheが持っているSSIなどの機能は使えず、飽くま
でPHPを試すためのものです。
Copyright © CA ADvance .inc 2012 20
- 21. PHP5.4の新機能
かなりたくさんありましたね。覚えるのが大変そうです・・・
便利な機能も多いので、使いこなせるようになりたいですね!
Copyright © CA ADvance .inc 2012 21
- 22. PHP5.4の新機能
次はPHP5.3→5.4のバージョンアップについて見ていきましょう。
Copyright © CA ADvance .inc 2012 22
- 23. PHP5.3→5.4のバージョンアップについて
■とりあえず移行ガイドを見てみる。
http://php.net/manual/ja/migration54.php
PHP 5.4.x で改良された点のほどんどは、既存のコードに影響
を及ぼしません。
→おぉ、素晴らしい!!
Copyright © CA ADvance .inc 2012 23
- 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() (こ
ちらは以前からそうなっていた) と同じになりました。
Copyright © CA ADvance .inc 2012 24
- 25. PHP5.3→5.4のバージョンアップについて
特にやばそうなもの。
■呼び出し時の参照渡しをサポートしなくなりました。
■$a が文字列の場合に非数値のオフセット (たとえば $a['foo']) を指定したときの isset() の返り値は false、 そして
empty() の返り値は true となりました。 そして同時に E_WARNING が発生します。
■配列を文字列に変換しようとすると E_NOTICE が発生するようになりました。 キャストの結果は "Array" で、以前と変
わりません。
■NULL、FALSE あるいは空文字列にプロパティを追加してオブジェクトに変換しようとすると、 これまでのような
E_STRICT エラーではなく warning が発生するようになりました。
Copyright © CA ADvance .inc 2012 25
- 26. PHP5.3→5.4のバージョンアップについて
シーエーアドバンスでもPHP5.4に取り組もうとしました。
対象は、インターネット広告運用のプラットフォーム。
オレオレフレームワークです。
Copyright © CA ADvance .inc 2012 26
- 27. PHP5.3→5.4のバージョンアップについて
広告運用プラットフォーム
→オレオレフレームワーク。
参照渡しがたくさん→気合いで修正。
Depricatedがたくさん→とりあえず無視。
何とか動くようになったと思ったら・・・
Copyright © CA ADvance .inc 2012 27
- 28. PHP5.3→5.4のバージョンアップについて
開発機(ローカルWindows)のmemcacheが動かない・・・
PHP5.4版のphp_memcache.dllをネットで探すも見つからず。
→バージョンアップは一旦断念。
残念!!!!!
Copyright © CA ADvance .inc 2012 28
- 29. 総括
許されるなら、早くPHP5.4に切り替えた方が良いと思います。
・大幅なメモリ使用量の削減
(43%削減されるというデータがあるそうです)
・実行速度のUP
(あるテストでは、25%高速化されているという結果も)
・新機能を使うことによる、コード量の削減→見やすいコードに
などなど、新しいものには素晴らしい部分がたくさんあります。
Copyright © CA ADvance .inc 2012 29