PHPの今とこれから2014 
PHP Conference 2014, Tokyo 
October 11, 2014 
廣川 類 (日本PHPユーザ会) 
1
自己紹介:ひろかわ 
PHPのホビーユーザ(1996~) 
PHPマニュアルの日本語化 
マルチバイト化:mbstringエクステンション 
PHP関連書籍: 
2 
PHPカンファレンス皆勤中!
アジェンダ 
PHPの今 
新しいPHP 
3
PHPとは? 
PHPは主にWebアプリケーションに使用されるスクリプト言語 
1995年の誕生以来、Webと共に成長、進化 
244M サイト (39%)のWebサーバーでPHPが実行されている 
82.0% 
17.3% 
2.7% 
0.7% 
0.6% 
サーバサイドスクリプト言語 
PHP 
ASP.NET 
Java 
ColdFusion 
Perl 
引用: W3Techs.com, 2014/10/1 
60.9% 
7.9% 
5.2% 
2.9% 
2.7% 
CMSシェア 
WordPress 
Joomla 
Drupal 
Blogger 
Magento 
4
PHP アンケート 2014 
主に使っているPHPのバージョン 1) PHP <=5.2 2) PHP 5.3 3) PHP 5.4 4) PHP 5.5 5) PHP 5.6 6) 使ってない 
5
PHPバージョン分布 
引用: W3Techs.com, 2014/9/21 
0.1% 
3.7% 
23.1% 
48.4% 
23.3% 
1.3% 
5.6 
5.5 
5.4 
5.3 
5.2 
5.1 
(51.9%) 
(39.3%) 
(6.4%) 
5.2半減、5.3微減、5.4大幅増(4倍) 
EOLとなったPHP 5.3以前のユーザが約3/4 register_globalsの呪い? 
6
PHPの歩み 
2004 
2005 
2006 
2007 
2008 
2009 
2010 
5.3 
`09/6 
・名前空間 
・クロージャ 
・遅延静的束縛 
・GC改善 
・MySQLnd 
7.0 
PHP 
10周年 
JPUG 
10周年 
フレームワーク 
AJAX 
XML 
W/S API 
2011 
2012 
PHPcon 関西 
PHPcon 
北海道 
5.4 
・Traits 
- 速度改善 
- MB対応標準化 
- 組込みWebサーバ 
- レガシー機能削除 
`12/3 
6.0 
`10/3 キャンセル 
・Unicode 
`10/12 (EOL) 
5.0 
`04/7 
5.1 
`05/11 
5.2 
`06/11 
・メモリ/速度改善 
・入力フィルタ 
・速度改善 
・PDO 
スマホ 
2013 
5.5 
・ジェネレータ 
- キャッシュ 
- パスワードハッシュ 
`13/6 
`14/8 (EOL) 
2014 
php.net攻撃される (2013/10) 
クラウド 
2015 
5.6 
・デバッガ 
・定数スカラー式 
`14/8 
Hack/HHVM 
phpng 
5.7 
2016 
・ZE2 
・SimpleXML 
・SQLite, MySQLi 
7
PHP リリースとPHP 5.3 EOL 
PHP 5.3 
EOLをPHP 5.5リリース時に宣言(2013/6) 
セキュリティ修正のみ実施(1年間) → 2014/8にEOL 
https://wiki.php.net/rfc/releaseprocess 
https://wiki.php.net/rfc/php53eol 
リリースサイクル:1年 
ライフサイクル:3年(バグ修正:2年、セキュリティ修正のみ:1年) 
PHP 5.4 
PHP 5.4.33がバグ修正最終版 
セキュリティ修正:1年 (→ 2015/8にEOL) 
8
PHPリリース情報 
*1 X.509証明書の時刻スタンプ処理:任意コード実行、DoS 
*2 null byte injection in gd 
*3 buffer overflow in php_parserr (dns) 
Release 
5.3 
5.4 
5.5 
変更 
2013/12/12 
5.3.28 
5.4.23 
5.5.7 
CVE-2013-6420 (openssl_x509_parse)*1,4248 
2014/1/9 
5.4.24 
5.5.8 
CVE-2013-6712 (dateinterval,DoS) 
2014/2/6 
5.4.25 
5.5.9 
CVE-2013-7226 (gdImageCrop,DoS) 
2014/3/6 
5.4.26 
5.5.10 
CVE-2014-1943,2270 
2014/4/3 
5.4.27 
5.5.11 
CVE-2013-7345 
2014/5/1 
5.4.28 
5.5.12 
CVE-2014-0185(sapi/fpm,権限設定) 
2014/5/29 
5.4.29 
5.5.13 
CVE-2014-0238,0237 
2014/6/26 
5.4.30 
5.5.14 
CVE-2014-3981,0207,3478,3479,3480,3487 
2014/8/14 
5.3.29 
5.3 EOL: CVE-2013-6712,2014-* 
2014/8/21 
5.4.32 
5.5.16 
CVE-2014-3538,3587, 5120*2,3597*3,4698,4670 
CVE: Common Vulnerabilities and Exposures 
fileinfo関連 
Heartbleed,ShellShock 
9
PHP 5.6 改善/変更のポイント 
若干の速度改善:5%? 
php://inputが再利用可に。POST用メモリ半減 
可変長引数・配列展開の構文追加(’…’構文) 
累乗演算子(’**’構文) 
定数のスカラー式 
useによる関数/定数のインポート 
デバッガ標準搭載:phpdbg 
10
PHP 5.6:互換性に関する変更 
default_charset(UTF-8)がhtmlentities()等のデフォルトに 
文字コード設定の統一化(mbstring.*は非推奨) 
非互換コンテキストからのコール(非staticメソッドのstaticコール など)が非推奨に 
SSL/TLS機能強化: ピア証明書/ホスト名検証デフォルト有効化 中間者攻撃(MITM)の防止 
サーバ 
クライアント 
中間者 
認証局 
11
PHP5.6: 地道な改善 
Athlon II X4 640 3.0GHz, Ubuntu 14.04 
0 
0.5 
1 
1.5 
2 
2.5 
3 
3.5 
4 
4.5 
PHP 5.3 
PHP 5.4 
PHP 5.5 
PHP 5.6 
実行時間[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) 
mandel2 
mandel 
simpleudcall 
simpleucall 
simplecall 
simple 
12
PHP5.6: 地道な改善 
Athlon II X4 640 3.0GHz, Ubuntu 14.04 
0 
5 
10 
15 
20 
25 
30 
PHP 5.3 
PHP 5.4 
PHP 5.5 
PHP 5.6 
実行時間[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 
13
PHP5.6: ’…’ 構文 
可変長引数: オプション部(可変部)を配列で取得 従来のfunc_get_args()より簡潔に記述できる 
関数引数における配列アンパック:Rubyのsplat演算子 
function f($val, ...$params) { echo "$val:",count($params); 
} 
f(“taro”, “users”,12 ); 
全オプション変数を保持 
taro : 2 
$v = [1,2,3]; 
f("taro",...$v); 
$v = [1,2,3]; 
f("taro",$v[0], $v[1], $v[2]); 
taro : 3 
14
PHP5.6: phpdbgデバッガ標準化 
http://phpdbg.com/ 
 SAPIとして実装された軽量デバッガ(PHP >=5.4をサポート) 
 リモートデバッグ対応(Javaクライアント付属) 
15
PHP5.6: 文字コード設定標準化 
文字コード関連オプションを標準化 
https://wiki.php.net/rfc/default_encoding 
input_encoding 
internal_encoding 
output_encoding 
iconv.* 
mbstring.* 
input_encoding 
http_input 
internal_encoding 
internal_encoding 
output_encoding 
output_encoding 
mbstring.http_input 
input_encoding 
例: 
デフォルトの文字コード:default_charset(デフォルト:UTF-8) 
旧設定はE_DEPRECATEDを発生(PHP 7.0以降で廃止予定) 
16 
旧設定 
新設定
PHP5.6: その他の機能(1) 
名前付き定数宣言、引数デフォルト値にスカラー式を使用可能 
累乗演算子(’**’構文) 
<?php 
const PI = 3.14; 
const RADIUS = 10.0; 
const AREA = PI*RADIUS**2; 
function f($r = RADIUS + 2.0) { return $r; 
} 
echo AREA; 
echo f(); 
314 
12 
17
<?php 
namespace Foo¥Moo { const A = 123; function fun() { echo A+1;} 
} 
namespace { use const Foo¥Moo¥A; use function Foo¥Moo¥fun; 
echo A; fun(); 
} 
PHP5.6: その他の機能(2) 
use で定数・関数を導入可能 
123 
124 
18
アジェンダ 
PHPの今 
新しいPHP 
19
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) 
20 
hhvm.com
Hack 
PHPを拡張したHHVM用の言語: 2014/2公開 
目的:大規模開発における開発効率化 
関数、クラスの型アノテーション:型チェッカ 
PHPからの移行は容易:移行ツール、gradual typing 
HHVMにおける最適化にも寄与 
型拡張:generics,collections,nullable 
非同期プログラミング:async,await 
21 
hacklang.org
Hackのコード例 
<?hh 
function add(int $a, int $b) : int { 
return $a + $b; 
} 
echo add(1,2); 
echo add(1,”a”); 
.hhconfig をトップに配置 
hh_clientで型チェック 
hhvmで実行 
<?php 
function add($a, $b) { 
return $a + $b; 
} 
echo add(1,2); 
echo add(1,”a”); 
エラー 
22
PHP互換環境の課題 
互換環境いろいろ:hhvm, HippyVM, Recki-CT, Zephir 
実行環境(特にJIT)が限定される 
PHP(Zend VM)との互換性 
23 
PHP言語仕様を策定:言語実装依存の問題を分離 
https://github.com/php/php-langspec
PHP 5.7 
PHP 7.0開発に2年要する見込み 
2015/8 リリース?(リリース自体も未定) 
機能改善内容は未定(小規模な改善と予想) 
https://wiki.php.net/rfc/ 
24
PHP Next Generation 
2014/5 phpng発表:メモリ管理、内部変数仕様改善 
性能はhhvmに追い付いてきた(WP3.9で -15%) 
ユーザ仕様は上位互換性維持、エクステンションは要改定 
2014/7 次期リリース名称を PHP 7 (phpngベース)に決定 
PHP 7のリリースは? 2015にα版(?)、2016リリース(?) 
https://wiki.php.net/rfc/php6 
https://wiki.php.net/phpng 
25
PHP 7に向けて( 検討中) 
エンジン/メモリ管理大幅改善:JITサポート? 
ASTベースコンパイラ(スクリプト→中間コード) 
OpCacheエンジン統合化 
非同期プログラミング 
64bit対応 
Unicodeサポート 
HTTP2 
ネーティブアノテーション/スカラータイプヒンティング 
https://wiki.php.net/ideas/php6 
Abstract syntax tree : AST 
* HHVMでサポート済み 
26
より速く、快適に 
Athlon II X4 640 3.0GHz, Ubuntu 14.04 
0 
0.5 
1 
1.5 
2 
2.5 
3 
3.5 
4 
4.5 
PHP 5.3 
PHP 5.4 
PHP 5.5 
PHP 5.6 
PHP 7.0 
HHVM 3.3 
実行時間[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) 
mandel2 
mandel 
simpleudcall 
simpleucall 
simplecall 
simple 
27
より速く、快適に 
Athlon II X4 640 3.0GHz, Ubuntu 14.04 
0 
5 
10 
15 
20 
25 
30 
PHP 5.3 
PHP 5.4 
PHP 5.5 
PHP 5.6 
PHP 7.0 
HHVM 3.3 
実行時間[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 
28
PHPの未来 
php 
frameworks 
applications / plugins 
pecl 
users 
Hack/HHVMリリースの持つ意味 
Webの進化に迅速に対応できているか? 
外部開発者との密な連携が課題 
実装間の互換性:アプリ作成側の開発負荷低減 
高性能かつ現実的な解を継続的に提供する 
zend 
hni 
29 
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 
メーリングリスト 
30
31 
2F小展示 
4Fコンベンション 
3F特別会議室 
6F会議室C 
PHPコアから読み解くPHP5.5 
Ansibleではじめるサーバ作 業の自動化 
初心者セッション 
ブラウザだけでOK! 
AzureでさわっておぼえるPHP(登録制) 
メルカリの超高速開発を支え るPHP 
Mysqlnd徹底解説 
擬人化から始めるOOP超入 門 
安全なPHPアプリケーションの 作り方2014 
PHPerがAWSと出会って DevOpsを目指した話 
パーフェクト成長戦略 
(学生・新卒エンジニア向け) 
PHPにおけるI/O多重化と yield 
ウエブエンジニアのための Angular.js入門 
Webデザイナ向けGithub 
ハンズオン 
HHVM+Hack==PHP++ 
PHPエンジニアのためのアクセ スログ解析基盤構築入門 
ウェブエンジニアに必要なセ キュリティスキルとは 
Good Parts of PHP and 
The UNIX Philosophy 
LT CMS/DB 
Webアプリのデプロイ今昔物 語 
初心者向けPHPソースコード 診断 
エンジニアだって、企画書に 強くなった方がいい 
LT無差別級 
メイン 
Bトラック 
Cトラック 
ワークショップ 
10:50 
11:30 
12:10 
12:40 
13:30 
14:10 
14:50 
15:30 
PHP Conference 2014 の見どころ
PHPカンファレンス紹介 
Twitterアカウント:@phpcon , ハッシュタグ:#phpcon2014 
Facebookページ:phpcon.japan 
PHP Conference 2014関連情報 
http://phpcon.php.gr.jp/w/2014/#program 
32
http://www.flickr.com/photos/skoop/2965898655/sizes/m/in/photostream/ 
PHPカンファレンス2014を 
お楽しみください! 
33

PHPの今とこれから2014

  • 1.
    PHPの今とこれから2014 PHP Conference2014, Tokyo October 11, 2014 廣川 類 (日本PHPユーザ会) 1
  • 2.
    自己紹介:ひろかわ PHPのホビーユーザ(1996~) PHPマニュアルの日本語化 マルチバイト化:mbstringエクステンション PHP関連書籍: 2 PHPカンファレンス皆勤中!
  • 3.
  • 4.
    PHPとは? PHPは主にWebアプリケーションに使用されるスクリプト言語 1995年の誕生以来、Webと共に成長、進化 244M サイト (39%)のWebサーバーでPHPが実行されている 82.0% 17.3% 2.7% 0.7% 0.6% サーバサイドスクリプト言語 PHP ASP.NET Java ColdFusion Perl 引用: W3Techs.com, 2014/10/1 60.9% 7.9% 5.2% 2.9% 2.7% CMSシェア WordPress Joomla Drupal Blogger Magento 4
  • 5.
    PHP アンケート 2014 主に使っているPHPのバージョン 1) PHP <=5.2 2) PHP 5.3 3) PHP 5.4 4) PHP 5.5 5) PHP 5.6 6) 使ってない 5
  • 6.
    PHPバージョン分布 引用: W3Techs.com,2014/9/21 0.1% 3.7% 23.1% 48.4% 23.3% 1.3% 5.6 5.5 5.4 5.3 5.2 5.1 (51.9%) (39.3%) (6.4%) 5.2半減、5.3微減、5.4大幅増(4倍) EOLとなったPHP 5.3以前のユーザが約3/4 register_globalsの呪い? 6
  • 7.
    PHPの歩み 2004 2005 2006 2007 2008 2009 2010 5.3 `09/6 ・名前空間 ・クロージャ ・遅延静的束縛 ・GC改善 ・MySQLnd 7.0 PHP 10周年 JPUG 10周年 フレームワーク AJAX XML W/S API 2011 2012 PHPcon 関西 PHPcon 北海道 5.4 ・Traits - 速度改善 - MB対応標準化 - 組込みWebサーバ - レガシー機能削除 `12/3 6.0 `10/3 キャンセル ・Unicode `10/12 (EOL) 5.0 `04/7 5.1 `05/11 5.2 `06/11 ・メモリ/速度改善 ・入力フィルタ ・速度改善 ・PDO スマホ 2013 5.5 ・ジェネレータ - キャッシュ - パスワードハッシュ `13/6 `14/8 (EOL) 2014 php.net攻撃される (2013/10) クラウド 2015 5.6 ・デバッガ ・定数スカラー式 `14/8 Hack/HHVM phpng 5.7 2016 ・ZE2 ・SimpleXML ・SQLite, MySQLi 7
  • 8.
    PHP リリースとPHP 5.3EOL PHP 5.3 EOLをPHP 5.5リリース時に宣言(2013/6) セキュリティ修正のみ実施(1年間) → 2014/8にEOL https://wiki.php.net/rfc/releaseprocess https://wiki.php.net/rfc/php53eol リリースサイクル:1年 ライフサイクル:3年(バグ修正:2年、セキュリティ修正のみ:1年) PHP 5.4 PHP 5.4.33がバグ修正最終版 セキュリティ修正:1年 (→ 2015/8にEOL) 8
  • 9.
    PHPリリース情報 *1 X.509証明書の時刻スタンプ処理:任意コード実行、DoS *2 null byte injection in gd *3 buffer overflow in php_parserr (dns) Release 5.3 5.4 5.5 変更 2013/12/12 5.3.28 5.4.23 5.5.7 CVE-2013-6420 (openssl_x509_parse)*1,4248 2014/1/9 5.4.24 5.5.8 CVE-2013-6712 (dateinterval,DoS) 2014/2/6 5.4.25 5.5.9 CVE-2013-7226 (gdImageCrop,DoS) 2014/3/6 5.4.26 5.5.10 CVE-2014-1943,2270 2014/4/3 5.4.27 5.5.11 CVE-2013-7345 2014/5/1 5.4.28 5.5.12 CVE-2014-0185(sapi/fpm,権限設定) 2014/5/29 5.4.29 5.5.13 CVE-2014-0238,0237 2014/6/26 5.4.30 5.5.14 CVE-2014-3981,0207,3478,3479,3480,3487 2014/8/14 5.3.29 5.3 EOL: CVE-2013-6712,2014-* 2014/8/21 5.4.32 5.5.16 CVE-2014-3538,3587, 5120*2,3597*3,4698,4670 CVE: Common Vulnerabilities and Exposures fileinfo関連 Heartbleed,ShellShock 9
  • 10.
    PHP 5.6 改善/変更のポイント 若干の速度改善:5%? php://inputが再利用可に。POST用メモリ半減 可変長引数・配列展開の構文追加(’…’構文) 累乗演算子(’**’構文) 定数のスカラー式 useによる関数/定数のインポート デバッガ標準搭載:phpdbg 10
  • 11.
    PHP 5.6:互換性に関する変更 default_charset(UTF-8)がhtmlentities()等のデフォルトに 文字コード設定の統一化(mbstring.*は非推奨) 非互換コンテキストからのコール(非staticメソッドのstaticコール など)が非推奨に SSL/TLS機能強化: ピア証明書/ホスト名検証デフォルト有効化 中間者攻撃(MITM)の防止 サーバ クライアント 中間者 認証局 11
  • 12.
    PHP5.6: 地道な改善 AthlonII X4 640 3.0GHz, Ubuntu 14.04 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 PHP 5.3 PHP 5.4 PHP 5.5 PHP 5.6 実行時間[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) mandel2 mandel simpleudcall simpleucall simplecall simple 12
  • 13.
    PHP5.6: 地道な改善 AthlonII X4 640 3.0GHz, Ubuntu 14.04 0 5 10 15 20 25 30 PHP 5.3 PHP 5.4 PHP 5.5 PHP 5.6 実行時間[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 13
  • 14.
    PHP5.6: ’…’ 構文 可変長引数: オプション部(可変部)を配列で取得 従来のfunc_get_args()より簡潔に記述できる 関数引数における配列アンパック:Rubyのsplat演算子 function f($val, ...$params) { echo "$val:",count($params); } f(“taro”, “users”,12 ); 全オプション変数を保持 taro : 2 $v = [1,2,3]; f("taro",...$v); $v = [1,2,3]; f("taro",$v[0], $v[1], $v[2]); taro : 3 14
  • 15.
    PHP5.6: phpdbgデバッガ標準化 http://phpdbg.com/  SAPIとして実装された軽量デバッガ(PHP >=5.4をサポート)  リモートデバッグ対応(Javaクライアント付属) 15
  • 16.
    PHP5.6: 文字コード設定標準化 文字コード関連オプションを標準化 https://wiki.php.net/rfc/default_encoding input_encoding internal_encoding output_encoding iconv.* mbstring.* input_encoding http_input internal_encoding internal_encoding output_encoding output_encoding mbstring.http_input input_encoding 例: デフォルトの文字コード:default_charset(デフォルト:UTF-8) 旧設定はE_DEPRECATEDを発生(PHP 7.0以降で廃止予定) 16 旧設定 新設定
  • 17.
    PHP5.6: その他の機能(1) 名前付き定数宣言、引数デフォルト値にスカラー式を使用可能 累乗演算子(’**’構文) <?php const PI = 3.14; const RADIUS = 10.0; const AREA = PI*RADIUS**2; function f($r = RADIUS + 2.0) { return $r; } echo AREA; echo f(); 314 12 17
  • 18.
    <?php namespace Foo¥Moo{ const A = 123; function fun() { echo A+1;} } namespace { use const Foo¥Moo¥A; use function Foo¥Moo¥fun; echo A; fun(); } PHP5.6: その他の機能(2) use で定数・関数を導入可能 123 124 18
  • 19.
  • 20.
    HHVM Facebookが開発/公開するPHP/Hack実行環境 2010/2HipHop 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) 20 hhvm.com
  • 21.
    Hack PHPを拡張したHHVM用の言語: 2014/2公開 目的:大規模開発における開発効率化 関数、クラスの型アノテーション:型チェッカ PHPからの移行は容易:移行ツール、gradual typing HHVMにおける最適化にも寄与 型拡張:generics,collections,nullable 非同期プログラミング:async,await 21 hacklang.org
  • 22.
    Hackのコード例 <?hh functionadd(int $a, int $b) : int { return $a + $b; } echo add(1,2); echo add(1,”a”); .hhconfig をトップに配置 hh_clientで型チェック hhvmで実行 <?php function add($a, $b) { return $a + $b; } echo add(1,2); echo add(1,”a”); エラー 22
  • 23.
    PHP互換環境の課題 互換環境いろいろ:hhvm, HippyVM,Recki-CT, Zephir 実行環境(特にJIT)が限定される PHP(Zend VM)との互換性 23 PHP言語仕様を策定:言語実装依存の問題を分離 https://github.com/php/php-langspec
  • 24.
    PHP 5.7 PHP7.0開発に2年要する見込み 2015/8 リリース?(リリース自体も未定) 機能改善内容は未定(小規模な改善と予想) https://wiki.php.net/rfc/ 24
  • 25.
    PHP Next Generation 2014/5 phpng発表:メモリ管理、内部変数仕様改善 性能はhhvmに追い付いてきた(WP3.9で -15%) ユーザ仕様は上位互換性維持、エクステンションは要改定 2014/7 次期リリース名称を PHP 7 (phpngベース)に決定 PHP 7のリリースは? 2015にα版(?)、2016リリース(?) https://wiki.php.net/rfc/php6 https://wiki.php.net/phpng 25
  • 26.
    PHP 7に向けて( 検討中) エンジン/メモリ管理大幅改善:JITサポート? ASTベースコンパイラ(スクリプト→中間コード) OpCacheエンジン統合化 非同期プログラミング 64bit対応 Unicodeサポート HTTP2 ネーティブアノテーション/スカラータイプヒンティング https://wiki.php.net/ideas/php6 Abstract syntax tree : AST * HHVMでサポート済み 26
  • 27.
    より速く、快適に Athlon IIX4 640 3.0GHz, Ubuntu 14.04 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 PHP 5.3 PHP 5.4 PHP 5.5 PHP 5.6 PHP 7.0 HHVM 3.3 実行時間[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) mandel2 mandel simpleudcall simpleucall simplecall simple 27
  • 28.
    より速く、快適に Athlon IIX4 640 3.0GHz, Ubuntu 14.04 0 5 10 15 20 25 30 PHP 5.3 PHP 5.4 PHP 5.5 PHP 5.6 PHP 7.0 HHVM 3.3 実行時間[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 28
  • 29.
    PHPの未来 php frameworks applications / plugins pecl users Hack/HHVMリリースの持つ意味 Webの進化に迅速に対応できているか? 外部開発者との密な連携が課題 実装間の互換性:アプリ作成側の開発負荷低減 高性能かつ現実的な解を継続的に提供する zend hni 29 hhvm hack phalcon Zephir
  • 30.
    PHPユーザ相互の情報交換および コミュニティの健全な発展 設立趣旨 • 高性能Webミドルウエアへのニーズ増大 • オープンソースソフトウエアの発展 背景 国内PHPユーザの増加 活動内容 ドキュメント整備 セミナー/イベント メンバー/スタッフ 国際化 http://www.php.gr.jp/ Web ・PHPユーザ会員と思ったらメンバー ・運営するのも楽しいかも 日本PHPユーザ会 (2000年4月発足) php-users, php-dev, php-doc, phpug-admin メーリングリスト 30
  • 31.
    31 2F小展示 4Fコンベンション 3F特別会議室 6F会議室C PHPコアから読み解くPHP5.5 Ansibleではじめるサーバ作 業の自動化 初心者セッション ブラウザだけでOK! AzureでさわっておぼえるPHP(登録制) メルカリの超高速開発を支え るPHP Mysqlnd徹底解説 擬人化から始めるOOP超入 門 安全なPHPアプリケーションの 作り方2014 PHPerがAWSと出会って DevOpsを目指した話 パーフェクト成長戦略 (学生・新卒エンジニア向け) PHPにおけるI/O多重化と yield ウエブエンジニアのための Angular.js入門 Webデザイナ向けGithub ハンズオン HHVM+Hack==PHP++ PHPエンジニアのためのアクセ スログ解析基盤構築入門 ウェブエンジニアに必要なセ キュリティスキルとは Good Parts of PHP and The UNIX Philosophy LT CMS/DB Webアプリのデプロイ今昔物 語 初心者向けPHPソースコード 診断 エンジニアだって、企画書に 強くなった方がいい LT無差別級 メイン Bトラック Cトラック ワークショップ 10:50 11:30 12:10 12:40 13:30 14:10 14:50 15:30 PHP Conference 2014 の見どころ
  • 32.
    PHPカンファレンス紹介 Twitterアカウント:@phpcon ,ハッシュタグ:#phpcon2014 Facebookページ:phpcon.japan PHP Conference 2014関連情報 http://phpcon.php.gr.jp/w/2014/#program 32
  • 33.