Download - PHPの今とこれから2015
PHPの今とこれから2015
PHP Conference 2015, Tokyo
October 3, 2015
廣川 類 (日本PHPユーザ会)
1
2
PHPとは?
PHPは主にWebアプリケーションに使用されるスクリプト言語
1995年の誕生以来、Webと共に成長、進化
81.3%
16.5%
3.0% 1.6%
0.7%
サーバサイドプログラミング言語
PHP
ASP.NET
Java
static files
ColdFusion
引用: W3Techs.com, 2015/9/22
58.7%
6.7%
5.0% 2.9% 2.8%
CMSシェア
WordPress
Joomla
Drupal
Magento
Blogger
3
PHP アンケート 2015
主に使っているPHPのバージョン 1) PHP <=5.3 2) PHP 5.4 3) PHP 5.5 4) PHP 5.6 5) PHP 7.0 6) 使ってない
4
PHPバージョン分布
引用: W3Techs.com, 2015/9/22
3.0%
12.0%
31.3% 38.1%
14.6% 1.0%
5.6
5.5
5.4
5.3
5.2
5.1(48.4%)
(22.3%)
(23.1%)
5.2 、5.3 10%減、5.5大幅増(3倍)
EOLとなったPHP 5.4以前のユーザ: 84%
5
(3.7%) (0.1%)
・名前空間 ・クロージャ ・遅延静的束縛 ・GC改善 ・MySQLnd
PHPの歩み
5.3
`09/6
7.0
5.4
・Traits ・高速化 ・MB標準化 ・組込みWebサーバ ・レガシー機能削除
`12/3
6.0
`10/3 キャンセル
・Unicode 5.5
・ジェネレータ ・キャッシュ ・パスワードハッシュ
`13/6 5.6
・デバッガ ・定数スカラー式
`14/8
6
`15/11/12
・大幅高速化 ・戻り値型宣言 ・スカラー型宣言
PHP 5.0 ‘04/7
PHPリリースサイクル
7
2012 2013 2014 2015 2016 2017 2018
5.3
5.4
5.5
5.6
アクティブサポート
セキュリティ修正のみ
2015/10
リリースサイクル:1年
ライフサイクル:3年(バグ修正:2年、セキュリティ修正のみ:1年)
EOL 2015/9/14
EOL 2016/7/10
EOL 2017/8/28
https://wiki.php.net/rfc/releaseprocess
http://php.net/supported-versions.php
PHPリリース情報 Release 5.4 5.5 5.6 変更
2014/10/16 5.4.34 5.5.18 5.6.2 CVE-2014-3670, 3668 ,3669
2014/11/13 5.4.35 5.5.19 5.6.3 CVE-2014-3710
2014/12/18 5.4.36 5.5.20 5.6.4 CVE-2014-8142
2015/1/22 5.4.37 5.5.21 5.6.5 CVE-2015-0231,0232, CVE-2014-9427,9652
2015/2/19 5.4.38 5.5.22 5.6.6 CVE-2015-0235,0273,2301, CVE-2014-9705
2015/3/19 5.4.39 5.5.23 5.6.7 CVE-2015-2787,2348,2305,4147,4148,2331
2015/4/16 5.4.40 5.5.24 5.6.8 CVE-2015-3330
2015/5/14 5.4.41 5.5.25 5.6.9 CVE-2015-4025,4026,2325,2326,4021
2015/6/11 5.4.42 5.5.26 5.6.10 CVE-2015-3414,3415,3416,4642,4644
2015/7/9 5.4.43 5.5.27 5.6.11 CVE-2015-3152,5589,5590
2015/8/6 5.4.44 5.5.28 5.6.12 CVE-2015-6831,6832,6833
2015/9/3 5.4.45 5.5.29 5.6.13 CVE-2015-6834,6835,6836,6837,6838
2015/10/1 5.5.30 5.6.14 8
escapeshellarg() OSコマンドインジェクション
PHP 7.0 改善/変更のポイント
大幅高速化 致命的エラーを例外捕捉可能に 古いSAPI、エクステンションの削除 ヌル合体演算子 (??) 結合比較演算子 ( <=> ) 戻り値型宣言 スカラー型宣言 匿名クラス
9
より速く、快適に
Athlon II X4 640 3.0GHz, Ubuntu 14.04 10
0
0.5
1
1.5
2
2.5
3
3.5
4
PHP 5.4 PHP 5.5 PHP 5.6 PHP 7.0 HHVM 3.9
実行時間
[s]
Zend/bench.php 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
PHP 7はPHP 5.6よりも大幅高速化
変数コンテナ等、内部構造を大幅最適化し、メモリを削減
より速く、快適に
Athlon II X4 640 3.0GHz, Ubuntu 14.04 11
0
2
4
6
8
10
12
14
16
PHP 5.4 PHP 5.5 PHP 5.6 PHP 7.0 HHVM 3.9
実行時間
[s]
Zend/micro_bench.php $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
WordPress 4.4 ベンチマーク
Athlon II X4 640 3.0GHz, Ubuntu 14.04 12
0
0.5
1
1.5
2
2.5
PHP 5.6 PHP 7.0 HHVM 3.9
PHP 7はPHP 5.6よりも約2倍高速
HHVM 3.9は更に約10%高速
リクエスト/秒の比(PHP 5.6: 1)
スカラー型宣言と戻り型宣言
スカラー型宣言と戻り型宣言のサポート
デフォルト動作は従来と同じ(non strictモード)
Strictモードにすると型チェックが有効になる
13
RFC: https://wiki.php.net/rfc/scalar_type_hints_v5
<?php
function add($a, $b) {
return $a+$b;
}
echo add(“2“,”3”); // 5
<?php
function add(int $a, int $b) : int {
return $a+$b;
}
echo add(“2“,”3”);
PHP 5.6 PHP 7
declare(strict_types = 1);
// エラー
致命的エラーを例外捕捉可能に
PHP 5では致命的エラー(回復可能な致命的エラー)の例外処理が困難だった。
function foo($obj) {
$obj->nope();
}
14
try {
foo(null);
} catch (¥Error $e) {
var_dump($e); // 回復処理
}
echo “alive!”; // alive!
RFC: https://wiki.php.net/rfc/engine_exceptions_for_php7
foo(null);
PHP 5.6
PHP 7
致命的エラー
PHP7: ’<=>’ 演算子
結合比較演算子:スペースシップ演算子
function order_func($a, $b) {
return ($a < $b) ? -1 : (($a > $b) ? 1 : 0);
}
15
function order_func($a, $b) {
return $a <=> $b;
}
https://wiki.php.net/rfc/combined-comparison-operator
PHP 5.6
PHP 7
PHP7: パーサ関連の変更
Abstract Syntax Tree (AST) :パーサとコンパイラを分離
コード管理が容易→ 最適化、メモリ削減
変数構文の統一
16
$obj->$bar [‘foo’]
RFC: https://wiki.php.net/rfc/abstract_syntax_tree
$obj->{$bar [‘foo’]}
{$obj->$bar} [‘foo’]
PHP 5.6
PHP 7
RFC: https://wiki.php.net/rfc/uniform_variable_syntax
PHP 7:互換性に関する変更
エクステンション削除: ereg, mysql, mssql
SAPI削除: 22種類→7種類
apache2handler, cgi, cli, embed, fpm, litespeed, phpdbg
ASP(<% .. %>)、Script(<script launguage=“php”></script>)廃止
newオブジェクトの参照代入廃止
PHP4形式のコンストラクタ: E_DEPRECATED
エクステンションは要変更: http://gophp7.org/gophp7-ext/
17
class C {}
$c =& new C;
class C {
function C() {}
}
$c = new C();
HHVM/Hackの進化
LTSリリース: 3.3, 3.6
3.8 で更に高速化: PHP7よりも平均10~20%高速
非同期クエリ(MySQL)による高速化を模索
18 From http://hhvm.com/blog
PHPのこれから
PHP 7.1開発が開始される。
PCO (PHP Cryptography Objects)
JIT ?
19
PHPの未来
php
frameworks
applications / plugins
pecl
users
Hack/HHVMリリースの持つ意味 PHP7は劇的に進化した、そしてこれからも…
高性能かつ現実的な解を継続的に提供する
zend
hni
20
hhvm
hack
phalcon Zephir
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 , ハッシュタグ:#phpcon2015
Facebookページ:pcon.japan
PHP Conference 2015関連情報
http://phpcon.php.gr.jp/2015
23
24
PHPカンファレンス2015を お楽しみください!
HHVM
Facebookが開発/公開するPHP/Hack実行環境
2010/2 HipHop for PHP:C++トランスレータ、互換性、管理
2011/12 HipHop Virtual Machine(HHVM):JITベースVM
リソース低減化(>66%)と速度改善(>5x), WP (2.5x)
FastCGI+Webサーバで実行
PHPスクリプト
バイトコード
パース/コンパイル
Zend VM
実行
PHP/Hackスクリプト
HipHopバイトコード(HHBC)
パース/コンパイル(AST)
JITコンパイラ(最適化)
ネーティブコード
HHVM
実行(x86-64,ARM64)
25
hhvm.com
Hack
PHPを拡張したHHVM用の言語: 2014/2公開
目的:大規模開発における開発効率化
関数、クラスの型アノテーション:型チェッカ
PHPからの移行は容易:移行ツール、gradual typing
HHVMにおける最適化にも寄与
型拡張:generics,collections,nullable
非同期プログラミング:async,await
26
hacklang.org