Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PHPの今とこれから2016

12,132 views

Published on

PHP Conference 2016, Tokyo, Track 1, Keynote.
PHPの最近の話題を紹介します。PHPのバージョン間の違い、もうすぐリリースされるPHP 7.1の話題を紹介します。
(プレゼン版は、PHP 5.6のサポート終了期限の情報が古かったので訂正しました)

Published in: Technology

PHPの今とこれから2016

  1. 1. PHPの今とこれから2016 PHP Conference 2016, Tokyo November 3, 2016 廣川 類 (日本PHPユーザ会) 1
  2. 2. 2 7
  3. 3. PHPとは?  PHPは主にWebアプリケーションに使用されるスクリプト言語  1995年の誕生以来、Webと共に成長、進化 80% 15% 3% 1% 1% サーバサイドプログラミング言語 PHP ASP.NET Java static files 引用: W3Techs.com, 2016/10/16 78% 8% 6% 4% 3% CMS シェア WordPress Joomla Drupal Magento Blogger 3
  4. 4. PHP アンケート 2016  主に使っているPHPのバージョン 1) PHP <=5.4 2) PHP 5.5 3) PHP 5.6 4) PHP 7.0 5) PHP 7.1 6) 使ってない 4
  5. 5. PHPバージョン分布 引用: W3Techs.com, 2016/10/12 2% 17% 19% 26% 26% 10% 1% 7.0 5.6 5.5 5.4 5.3 5.2 5.1 (31.3%) (14.6%) (12.0%)  5.3:12%減、5.4:+6%、5.5:+7% 、5.6:+14%  EOLとなったPHP 5.5以前のユーザ: 81% 5 (3.0%) (38.1%)
  6. 6. PHPリリースサイクル 6 2013 2014 2015 2016 2017 2018 2019 5.3 5.4 5.5 5.6 7.0 アクティブサポート セキュリティ修正のみ 2016/11 リリースサイクル:1年 ライフサイクル:3年(バグ修正:2年、セキュリティ修正のみ:1年) PHP 5.6はサポート期間が2018年末まで延長 (⇒プレゼン修正します) EOL 2015/9/14 EOL 2016/7/10 EOL 2018/12/31 https://wiki.php.net/rfc/releaseprocess http://php.net/supported-versions.php
  7. 7. ・名前空間 ・クロージャ ・遅延静的束縛 ・GC改善 ・MySQLnd ・名前空間 ・クロージャ ・遅延静的束縛 ・GC改善 ・MySQLnd PHPの歩み 2009 5.3 `09/6 7.07.0 5.45.4 ・Traits ・高速化 ・MB標準化 ・組込みWebサーバ ・レガシー機能削除 ・Traits ・高速化 ・MB標準化 ・組込みWebサーバ ・レガシー機能削除 `12/3 6.0 `10/3 キャンセル ・Unicode 5.5 ・ジェネレータ ・キャッシュ ・パスワードハッシュ ・ジェネレータ ・キャッシュ ・パスワードハッシュ `13/6 5.6 ・デバッガ ・定数スカラー式 ・デバッガ ・定数スカラー式 `14/8 7 2010 2011 2012 2013 2014 2015 2016 `15/12 ・大幅高速化 ・戻り値型宣言 ・スカラー型宣言 ・大幅高速化 ・戻り値型宣言 ・スカラー型宣言 PHP 5.0 ‘04/7 2017 7.17.1 `16/12? ・Nullable ・複数例外キャッチ ・Nullable ・複数例外キャッチ
  8. 8. PHPリリース情報 Release 5.5 5.6 7.0 変更 2015/10/29 5.6.15 2015/11/26 5.6.16 2015/12/3 7.0.0 2016/12/17 7.0.1 CVE-2015-8616,8617 2016/1/7 5.5.31 5.6.17 7.0.2 CVE-2016-5114,1903,1904 2016/2/4 5.5.32 5.6.18 7.0.3 CVE-2015-8383,8386,8387,8389,8390,8391,8393,8394 CVE-2016-4342,4343,2554 2016/3/3 5.5.33 5.6.19 7.0.4 CVE-2016-4344,4355,4346,3185 2016/3/31 5.5.34 5.6.20 7.0.5 CVE-2015-8865.CVE-2016-4070…4073 2016/4/28 5.5.35 5.6.21 7.0.6 CVE-2016-4537…4544,3074 2016/5/26 5.5.36 5.6.22 7.0.7 CVE-2016-5096,5094,5093,4343,CVE-2013-7456 2016/6/23 5.5.37 5.6.23 7.0.8 CVE-2015-8874,CVE-2016-5766…5773 2016/7/21 5.5.38 5.6.24 7.0.9 CVE-2016-6288…6292,5385,5399,6207,6294...6297 CVE-2015-8879 2016/8/18 5.6.25 7.0.10 CVE-2016-7124,7125,7127…7132 2016/9/16 5.6.26 7.0.11 CVE-2016-7411…7414,7416…7418 2016/10/13 5.6.27 7.0.12 8
  9. 9. PHP 7.1 改善/変更のポイント  Nullable型(?)  複数例外型のキャッチ  Curl HTTP/2サーバプッシュ  クラス定数の可視性(public,protected,private)  voidリターン型  負の文字列オフセット  list()におけるキーの指定、配列デストラクタの角括弧構文  無効な数値文字列の警告  mcrypt()廃止  mb_ereg_replaceのevalオプション廃止  session_gc(),session_create_id()追加 9
  10. 10. より速く、快適に Athlon II X4 640 3.0GHz, Ubuntu 16.04 10  PHP 7はPHP 5.6よりも大幅高速化  変数コンテナ等、内部構造を大幅最適化し、メモリを削減 PHP 5.5 PHP 5.6 PHP 7.0 PHP 7.1 HHVM 3.15 0 0.5 1 1.5 2 2.5 3 3.5 4 strcat(200000) sieve(30) nestedloop(12) matrix(20) heapsort(20000) hash2(500) hash1(50000) fibo(30) ary3(2000) ary2(50000) ary(50000) ackermann(7) mandel2 mandel simpleudcall simpleucall simplecall simple 実行時間[s] Zend/bench.php
  11. 11. より速く、快適に Athlon II X4 640 3.0GHz, Ubuntu 16.04 11 Zend/micro_bench.php PHP 5.5 PHP 5.6 PHP 7.0 PHP 7.1 HHVM 3.15 0 2 4 6 8 10 12 14 16 $x = $f ? $f : tmp $x = $f ? $f : $a $x = $f ?: tmp $x = $a ?: null $x = $str[0] $x = $hash['v'] $x = $GLOBALS['v'] $x = $_GET $x = TEST new Foo() $x = Foo::TEST $this->f() empty($this->x) isset($this->x) $this->x-- $this->x++ --$this->x ++$this->x $this->x += 2 $this->x = 0 $x = $this->x Foo::f() self::f() empty(Foo::$x) isset(Foo::$x) Foo::$x = 0 $x = Foo::$x empty(self::$x) isset(self::$x) self::$x = 0 $x = self::$x int_func() undef_func() func() empty_loop 実行時間[s]
  12. 12. WordPress 4.4 ベンチマーク Athlon II X4 640 3.0GHz, Ubuntu 14.04 12 PHP 5.6 PHP 7.0 HHVM 3.9 0 0.5 1 1.5 2 2.5  PHP 7はPHP 5.6よりも約2倍高速  HHVM 3.9は更に約10%高速 リクエスト/秒の比(PHP 5.6: 1)
  13. 13. 複数例外型のキャッチ  複数の例外のキャッチが一度に記述可能に  異なる例外で共通の処理を行う場合の記述をシンプルに 13 RFC: https://wiki.php.net/rfc/multiple-catch try { echo 'TRY'.PHP_EOL; throw new Exception2; } catch (Exception1 $e) { echo get_class($e).PHP_EOL; } catch (Exception2 $e) { echo get_class($e).PHP_EOL; } finally { echo 'Finally'.PHP_EOL; } try { echo 'TRY'.PHP_EOL; throw new Exception2; } catch (Exception1 | Exception2 $e) { echo get_class($e).PHP_EOL; } finally { echo 'Finally'.PHP_EOL; } PHP 7.0 PHP 7.1
  14. 14. リスト構文の改善  リスト形式の代入:添字が0から始まる必要があった  リスト形式の代入の記述がシンプルに 14 https://wiki.php.net/rfc/short_list_syntax $a = [1,2,3]; list($a,$b,$c) = $a; $a = [1,2,3]; [$a,$b,$c] = $a; PHP 7.0 PHP 7.1 $a = ['name'=>'taro','age'=>28]; list('name'=>$name, ‘age’=>$age) = $a; // エラー $name = $a[‘name’]; $age = $a[‘age’]; $a = ['name'=>'taro','age'=>28]; ['name'=>$name,'age'=>$age] = $a;
  15. 15. クラス定数のアクセサ指定  従来:クラス定数は全てpublic (アクセス制限機能なし) class Foo { const ONE=1; } 15 class Foo { public const ONE=1; private const TWO=2; protected const THREE=3; static public function show() { return self::TWO+self::THREE; } } RFC: https://wiki.php.net/rfc/class_const_visibility PHP 7.0 PHP 7.1 echo Foo::ONE; // 1 echo Foo::ONE; // 1 echo Foo::TWO; echo Foo::THREE; echo Foo:show(); // 5 致命的エラー
  16. 16. Nullable型  ‘?’:ヌルを引数/戻り値の型として指定可能であることを示す 16 function foo(string $msg) { echo $msg; } foo(‘hello’); foo(null); foo(); foo(new stdclass); https://wiki.php.net/rfc/nullable_types Nullableでない場合 function foo(?string $msg) { echo $msg; } foo(‘hello’); foo(null); foo(); foo(new stdclass); 致命的エラー Nullableの場合 致命的エラー
  17. 17. PHP 7.1:互換性に関する変更  エクステンション削除: mcrypt()  PHP 7.1: mcrypt関数はE_DEPRECATED通知を返す  PHP 7.2以降: 削除→PECLに移動  libmcryptはメンテされていない→ opensslを推奨  オプション削除: mb_ereg_replace() の evalオプション(‘e’)  PHP 7.1: E_DEPRECATED通知を返す  mb_ereg_replace_callback()を推奨 17
  18. 18. HHVM/Hackの進化 18 From http://hhvm.com/blog バージョン リリース日 内容 3.10.0 2015/10/15 strtr()性能改善 3.11.0 2015/12/9 PHP7サポート 3.12.0 2016/2/12 LTS 3.13.0 2016/3/31 3.14.0 2016/6/10 3.15.0 2016/9/7 LTS: shmop, pgsql, scrypt Facebookが開発/公開するPHP/Hack実行環境
  19. 19. PHPのこれから PHP 7.2開発が開始される。 PCO (PHP Cryptography Objects)  https://wiki.php.net/rfc/php71-crypto  PDOライクな暗号/ハッシュ関数: Libsodium, OpenSSL JIT for PHP: OpCacheを拡張、Zendが次期 PHP(PHP8)用開発コードをテスト公開(2016/9/1)  https://github.com/zendtech/php-src/tree/jit-dynasm/ext/opcache/jit 19
  20. 20. PHPの未来 php frameworks applications / plugins pecl users Hack/HHVMリリースの持つ意味  PHP7は劇的に進化した、そしてこれからも… 高性能かつ現実的な解を継続的に提供する zend hni 20 hhvm hack phalcon Zephir
  21. 21. PHPユーザ相互の情報交換および コミュニティの健全な発展 設立趣旨 • 高性能Webミドルウエアへのニーズ増大 • オープンソースソフトウエアの発展 背景 国内PHPユーザの増加 活動内容 ドキュメント整備 セミナー/イベント メンバー/スタッフ 国際化 http://www.php.gr.jp/ Web ・PHPユーザ会員と思ったらメンバー ・運営するのも楽しいかも 日本PHPユーザ会 (2000年4月発足) php-users, php-dev, php-doc, phpug-admin メーリングリスト 21
  22. 22. 22 PHP Conference 2016 の見どころ
  23. 23.  PHPカンファレンス紹介  Twitterアカウント:@phpcon , ハッシュタグ:#phpcon2016  Facebookページ:pcon.japan  Wifi: SSID: PHPCon2016, pass: パンフレット裏表紙に記載 PHP Conference 2016関連情報 http://phpcon.php.gr.jp/2016/ 23
  24. 24. 24 PHPカンファレンス2016を お楽しみください!

×