PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)

4,502 views

Published on

Summary of recent activity in the PHP community, new feature of PHP 5.3, 5.4 and 5.5.
This presentation is written by Japanese.

1 Comment
10 Likes
Statistics
Notes
No Downloads
Views
Total views
4,502
On SlideShare
0
From Embeds
0
Number of Embeds
981
Actions
Shares
0
Downloads
24
Comments
1
Likes
10
Embeds 0
No embeds

No notes for slide

PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)

  1. 1. PHPの今とこれから 2012PHPカンファレンス20122012年9月15日(土) 日本PHPユーザ会 廣川 類
  2. 2. ポスト5.3時代のコード マイクロフレームワークSlimの例 モジュラーデザイン:名前空間、オートローダー http://www.example.com/hello/taro http://www.example.com/hello/taro Hello, taro Hello, taro<?php Composed Composedrequire vendor/autoload.php;$app = new SlimSlim(); 名前空間 名前空間$app->get(/hello/:name, function ($name) use ($app) { $app->render(tpl1.php, array(name=> $name)); 無名関数 無名関数});$app->run(); [tpl1.php] [tpl1.php] Hello, <?= $name; ?> Hello, <?= $name; ?>
  3. 3. PHP アンケート 2012 主に使っているPHPのバージョン 1) PHP 4.x 2) PHP 5.0-5.1 3) PHP 5.2 4) PHP 5.3 5) PHP 5.4 6) 使ってない
  4. 4. PHPユーザ分布usage of server-side programming language (2012/9/8) 0.2% 0.6% 0.9% 1.2% 4.0% 21.2% PHP ASP.NET Java ColdFusion Perl Ruby Market Share of CMS 77.9% 22.8% WordPress Joomla 3.3% Drupal 54.3% 3.7% vBulletin 7.0% Blogger 8.9% other引用: W3Techs.com, 2012/9/8版
  5. 5. PHPユーザ分布Version of PHP (2012/9/8, W3Techs.com) 4.3% PHP 5 PHP 4 version of PHP 5 (2012/9/8, W3Techs.com) 4.1% 0.7% 95.7% 5.1 36.5% 5.2 5.3 5.4 58.6%引用: W3Techs.com, 2012/9/8版
  6. 6. バージョンを更新する/しない理由 「開発リソースの有効活用」とサポートの両立が課題更新する理由 更新しない理由・新機能/性能が魅力的 ・新機能/性能が魅力的 ・更新/確認の手間 ・更新/確認の手間・セキュリティ/バグ修正 ・セキュリティ/バグ修正 ・新機能/性能の魅力小 ・新機能/性能の魅力小・サポート切れ ・サポート切れ ・周辺環境の更新が追いつかない ・周辺環境の更新が追いつかない
  7. 7. PHPの歩み `10/3 キャンセル 6.0 5.5 ・Unicode `12/3・エンジン/OOP大幅強化:ZE2 `09/6 5.4・XML対応強化(SimpleXML) 5.3 ・Traits・Webサービス(SOAP) - 速度改善・DB強化 (SQLite, MySQLi) `06/11 ・名前空間 - MB対応標準化 ・クロージャ `05/11 5.2 ・遅延静的束縛 - 組込みWebサーバ - レガシー機能削除 5.1 ・メモリ/速度改善 ・GC改善 `04/7 ・MySQLnd ・速度改善 ・入力フィルタ 5.0 ・PDO `02/12 `05/6 4.3 4.4 `10/12 (EOL) `08/8 (EOL) ・CLI ・バグ修正 ・stream ・自動グローバル変数のデフォルト無効化 ・mbregex ・zend-multibyte 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 Web/DB XML PHP フレームワーク スマフォ JPUG PHPcon PHPcon セキュリティ W/S API 10周年 AJAX 10周年 関西 北海道
  8. 8. 開発のソーシャルコーディング対応 2012/3 ソースコードの管理をsubversionからgitへ移行 git.php.net → githubにミラー PHPソースをクローン 新機能バグ修正 RFC作成 バグトラッカで検索 実装+テストコード作成 #12345 議論/更新 登録 pullリクエスト発行 (チケット取得) 投票 http://bugs.php.net 議論/更新 http://wiki.php.net/rfc リクエスト受理/拒否 http://github.com/php/php-src
  9. 9. フレームワークと相互運用性 相互運用性 フレームワークA ORMクラスC interoperability ViewクラスD 独自クラスE モジュラー フレームワークB ORMクラスC ViewクラスF 独自クラスEPHP 5.3時代のフレームワーク(名前空間) FuelPHP 1.2 Symfony2 ZF 2
  10. 10. PHP-FIG と PSR http://www.php-fig.org/ PHP Framework Interoperability Group (PHP-FIG)  (以前: PHP Standards Working Group) 主要F/W関係者が参画: CakePHP, ZF,Symfony, ... PHP standards recommendation (PSR)を発行PSR-0 :ファイル/クラス/名前空間の標準化:autoloaderPSR-1 : 基本的なコーディング標準PSR-2 : コーディングスタイルガイド プロジェクトをPSR準拠とする 効率的で柔軟な運用が可能に
  11. 11. PSR準拠とするには?1.PHP Coding Standards Fixer (http://cs.sensiolabs.org/) PSR-0~2準拠となるよう修正 $ wget http://cs.sensiolabs.org/get/php-cs-fixer.phar $ php php-cs-fixer.phar fix /path/to/dir2.PHP_CodeSnifferで確認 $ pear install PHP_CodeSniffer $ cd /usr/share/php/CodeSniffer/Standards $ git clone https://github.com/klaussilveira/phpcs-psr PSR $ phpcs --config-set default_standard PSR
  12. 12. 依存性マネージャ:Composer パッケージマネージャ → dependency manager  プロジェクト単位で複数/階層的な依存関係を解決 主要フレームワークに対応 : Symfony2, ZF, FuelPHP, ... composer.jsonに依存性を記述 composer.jsonに依存性を記述 composer.jsonの例 { "require": { パッケージのインストール "twig/twig": "1.6.*", パッケージのインストール "slim/slim": "1.6.*", $ php composer.phar install } オートローダとロックファイル } (composer.lock)自動生成 依存性を更新 依存性を更新 (デフォルト:バージョンをロック) $ php composer.phar update
  13. 13. Packagist:Composerによる配布 http://packagist.org/statistics
  14. 14. PHP 5.4 改善/変更のポイント 速度改善:10%~15% Mix-inライクな機能を実現:Trait 古い機能の削除: register_globals, magic_quotes*, safe_mode* , ext/sqlite, ... ZEマルチバイト標準化、mbstring機能強化 組込みWebサーバー: php -S localhost:8080 課題: APCのサポートがまだβ版
  15. 15. PHP 5.4でより速く、快適に 大幅に高速化、省メモリ化 Zend/bench.php strcat(200000) 6 sieve(30) nestedloop(12) 5 matrix(20) heapsort(20000) hash2(500) 4 hash1(50000) 実行時間 [s] fibo(30) 3 ary3(2000) ary2(50000) ary(50000) 2 ackermann(7) mandel2 mandel 1 simpleudcall simpleucall 0 simplecall PHP 5.2 PHP 5.3 PHP 5.4 PHP 5.5 simple Athlon II X4 640 3.0GHz, Ubuntu 12.04
  16. 16. PHP 5.4でより速く、快適に 大幅に高速化、省メモリ化 $x = $f ? $f : tmp Zend/micro_bench.php $x = $f ? $f : $a 40 $x = $f ?: tmp $x = $a ?: null $x = $str[0] $x = $hash[v] 35 $x = $GLOBALS[v] $x = $_GET $x = TEST 30 new Foo() $x = Foo::TEST $this->f() empty($this->x) 25 isset($this->x) $this->x-- $this->x++ 実行時間 [s] --$this->x 20 ++$this->x $this->x += 2 $this->x = 0 $x = $this->x 15 Foo::f() self::f() empty(Foo::$x) isset(Foo::$x) 10 Foo::$x = 0 $x = Foo::$x empty(self::$x) isset(self::$x) 5 self::$x = 0 $x = self::$x int_func() undef_func() 0 PHP 5.2 PHP 5.3 PHP 5.4 Athlon II5.5 640 3.0GHz, Ubuntu 12.04 PHP X4 func() empty_loop
  17. 17. PHP 5.4 でコード再利用:Trait Trait: 単一継承の言語でコードを再利用する仕組み 実装の再利用( ≠ interface:実装を強制) クラスや他のTraitとのメソッド名衝突を解決する仕組みが必要<?php <?phptrait A { trait A { public function show() { public function show() { echo Hello,;} } echo Hello,,$this->getName(),!; } abstract public function getName(); trait B {} public function show() {echo PHP!;} }class Base { /* 1 */ } class Foo { use A, B {class Foo extends Base { A::show insteadof B; リネームでは use A; B::show as showN; } なくエイリアス public function getName() { echo PHP; } }}$obj = new Foo(); $obj = new Foo();echo $obj->show(); // Hello,PHP! echo $obj->show() . $obj->showN();
  18. 18. PHP 5.4 で日本語の扱いが便利に Zendエンジンマルチバイト対応標準化:バイナリ互換性改善 PHP <= 5.3 ◇ PHP構築時: --enable-zend-multibyte --enable-mbstring ◇ mbstring.script_encoding でスクリプト文字コード指定 PHP 5.4 ◇ zend.multibyte = On で有効に ◇ zend.script_encodingでスクリプト文字コード指定 デフォルト文字コードがISO-8859-1からUTF-8に: default_charset, htmlspecialchars(), etc. mbstring文字コード追加: 携帯絵文字(Unicode 6), etc.
  19. 19. PHP 5.4.1:コールバック関数による置換 正規表現置換eオプション:セキュリティホールとなりやすいmb_ereg_replace_callback()関数追加  → 置換文字列で コールバック関数を使用可能に PCREにおけるpreg_replace_callback()に相当 $str = abc 123 #; echo mb_ereg_replace((S+),"strlen(1)", $str, e); echo mb_ereg_replace_callback((S+), function ($m) { echo strlen($m[0]);}, $str);
  20. 20. PHP 5.5 リリース時期: 未定 (2013/3 ?) PHP 5.3、5.4と比べて小幅な改訂となる可能性がある 目玉機能は、(今のところ) Generator
  21. 21. Generator (https://wiki.php.net/rfc/generators) Generator:イテレータを関数で定義(Python) 例:ファイルの各行を処理: ファイル全体読込み→メモリが大量に必要 イタレータ定義:多くのコード記述が必要 配列全体を返すのではなく、値を生成するイタレータを返す <?php Nikita Popov function xrange($start, $end, $step = 1) { for ($i = $start; $i < $end; $i += $step) { 17歳、ベルリン yield $i; } } foreach (xrange(10, 20) as $i) { echo $i; 10,11,....,20 }
  22. 22. finallyキーワード (https://wiki.php.net/rfc/finally) finallyブロック:tryブロックから出る際に常に実行される 例外発生の有無によらない → クリンナップコードを記述 return等でクリンナップコードがバイパスされることを防止 try { echo ”1"; throw new Exception("ex"); } catch (Exception $e) { echo ”2"; } finally { echo "#"; } 12#
  23. 23. パスワード用ハッシュ パスワードハッシュ用API (https://wiki.php.net/rfc/password_hash) crypt関数のラッパー:従来はsalt文字列を作るのが面倒だった $hash = password_hash($password, PASSWORD_BCRYPT); echo password_verify($password, $hash) ? "OK" : "NG"; PBKDF2: パスワードハッシュ用キーストレッチ $key = hash_pbkdf2("sha512", $password, $salt, 5000, 16, true); $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128,    $key, $data, MCRYPT_MODE_CBC, $iv); scrypt に基づく実装も提案されている
  24. 24. その他の機能(1) 配列/文字列定数の添字参照 (https://wiki.php.net/rfc/constdereference) echo ”123”[1]; 2 ランダムな16進文字列を生成する例 echo [1,2,3][2]; 3 function randomHexString($length) { for ($i = 0, $s = ; $i < $length; ++$i) { $s .= "0123456789abcdef"[mt_rand(0, 15)]; } return $s; } echo randomHexString(10);  1e1384a471 foreachでリスト代入が可能に (https://wiki.php.net/rfc/foreachlist)foreach ($users as $user) { foreach ($users as list($id, $name)) { list($id, $name) = $user; echo “$id => $name”; echo “$id => $name”; }}
  25. 25. PHPの成功と未来 Rasmus語録 (http://en.wikiquote.org/wiki/Rasmus_Lerdorf) PHPは歯ブラシのようなもの。いつも使う役に立つシンプルな ツールだけど、誰も歯ブラシのことなんて気にしないよね。 PHPは「問題を解くためのシンプルなツール」なのさ。学習が容易: 言語がシンプル、ドキュメントが豊富- 多様な要求に応えつつ、わかり易さを保つことが必要- 地道な活動が重要: ローカルなPHPカンファレンス、勉強会、等進化を継続: Webの進化に対応し、必要十分な解を提供- 開発者/貢献者の育成- キラーアプリ(WordPressなど)の存在がキー
  26. 26. 日本PHPユーザ会設立趣旨 (2000年4月発足) 活動内容PHPユーザ相互の情報交換および Webコミュニティの健全な発展 http://www.php.gr.jp/ メーリングリスト背景 php-users, php-dev, php-doc, phpug-admin• 高性能Webミドルウエアへのニーズ増大• オープンソースソフトウエアの発展 ドキュメント整備 セミナー/イベント 国内PHPユーザの増加 国際化メンバー/スタッフ・PHPユーザ会員と思ったらメンバー・運営するのも楽しいかも

×