PHPの今とこれから2016
-
Upload
rui-hirokawa -
Category
Technology
-
view
9.746 -
download
0
Transcript of PHPの今とこれから2016
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 シェアWordPressJoomlaDrupalMagentoBlogger
3
PHPバージョン分布
引用: W3Techs.com, 2016/10/12
2%17%
19%
26%
26%
10% 1%7.05.65.55.45.35.25.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%)
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/releaseprocesshttp://php.net/supported-versions.php
・名前空間・クロージャ・遅延静的束縛・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・複数例外キャッチ
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,8394CVE-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...6297CVE-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.128
PHP 7.1 改善/変更のポイント Nullable型(?) 複数例外型のキャッチ Curl HTTP/2サーバプッシュ クラス定数の可視性(public,protected,private) voidリターン型 負の文字列オフセット list()におけるキーの指定、配列デストラクタの角括弧構文 無効な数値文字列の警告 mcrypt()廃止 mb_ereg_replaceのevalオプション廃止 session_gc(),session_create_id()追加
9
より速く、快適に
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.150
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)mandel2mandelsimpleudcallsimpleucallsimplecallsimple
実行
時間
[s]
Zend/bench.php
より速く、快適に
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.150
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 = TESTnew 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->xFoo::f()self::f()empty(Foo::$x)isset(Foo::$x)Foo::$x = 0$x = Foo::$xempty(self::$x)isset(self::$x)self::$x = 0$x = self::$xint_func()undef_func()func()empty_loop
実行
時間
[s]
WordPress 4.4 ベンチマーク
Athlon II X4 640 3.0GHz, Ubuntu 14.04 12
PHP 5.6 PHP 7.0 HHVM 3.90
0.5
1
1.5
2
2.5
PHP 7はPHP 5.6よりも約2倍高速
HHVM 3.9は更に約10%高速
リクエスト/秒の比(PHP 5.6: 1)
複数例外型のキャッチ
複数の例外のキャッチが一度に記述可能に
異なる例外で共通の処理を行う場合の記述をシンプルに
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
リスト構文の改善
リスト形式の代入:添字が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;
クラス定数のアクセサ指定
従来:クラス定数は全て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; // 1echo Foo::TWO; echo Foo::THREE;echo Foo:show(); // 5
致命的エラー
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の場合
致命的エラー
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
HHVM/Hackの進化
18From http://hhvm.com/blog
バージョン リリース日 内容
3.10.0 2015/10/15 strtr()性能改善3.11.0 2015/12/9 PHP7サポート3.12.0 2016/2/12 LTS3.13.0 2016/3/313.14.0 2016/6/103.15.0 2016/9/7 LTS: shmop, pgsql, scrypt
Facebookが開発/公開するPHP/Hack実行環境
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
PHPの未来
php
frameworksapplications / plugins
pecl
users
Hack/HHVMリリースの持つ意味 PHP7は劇的に進化した、そしてこれからも…
高性能かつ現実的な解を継続的に提供する
zendhni
20
hhvm
hack
phalconZephir
PHPユーザ相互の情報交換およびコミュニティの健全な発展
設立趣旨
• 高性能Webミドルウエアへのニーズ増大• オープンソースソフトウエアの発展
背景
国内PHPユーザの増加
活動内容
ドキュメント整備
セミナー/イベント
メンバー/スタッフ 国際化
http://www.php.gr.jp/Web
・PHPユーザ会員と思ったらメンバー・運営するのも楽しいかも
日本PHPユーザ会
(2000年4月発足)
php-users, php-dev, php-doc, phpug-admin
メーリングリスト
21
PHPカンファレンス紹介
Twitterアカウント:@phpcon , ハッシュタグ:#phpcon2016 Facebookページ:pcon.japan Wifi: SSID: PHPCon2016, pass: パンフレット裏表紙に記載
PHP Conference 2016関連情報
http://phpcon.php.gr.jp/2016/
23