PHPの今とこれから2016

24
PHPの今とこれから2016 PHP Conference 2016, Tokyo November 3, 2016 廣川 類 (日本PHPユーザ会) 1

Transcript of PHPの今とこれから2016

PHPの今とこれから2016

PHP Conference 2016, TokyoNovember 3, 2016

廣川 類 (日本PHPユーザ会)

1

2

7

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 アンケート 2016

主に使っているPHPのバージョン1) PHP <=5.4 2) PHP 5.5 3) PHP 5.6 4) PHP 7.05) PHP 7.16) 使ってない

4

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

22

PHP Conference 2016 の見どころ

PHPカンファレンス紹介

Twitterアカウント:@phpcon , ハッシュタグ:#phpcon2016 Facebookページ:pcon.japan Wifi: SSID: PHPCon2016, pass: パンフレット裏表紙に記載

PHP Conference 2016関連情報

http://phpcon.php.gr.jp/2016/

23

24

PHPカンファレンス2016をお楽しみください!