SlideShare a Scribd company logo
1 of 83
Download to read offline
1 
ヤフー株式会社 蒋池 東龍 (こもいけ とうりゅう) 
PHPコアから読み解く PHP5.5
2 
レジュメ 
•最初に(1分) 
•PHPコアとは?(3分) 
•PHP5.5の主な新機能や変更点(2分) 
•yield のコスト(10分) 
•boolval() の可否(8分) 
•zend_execute の実体化(5分) 
•終わりに(1分) 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
3 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 
最初に
4 
最初に 
PHP5.5 以上を使っていますか? 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
5 
最初に 
PHPコア という言葉を 
聞いたことがありますか? 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
6 
最初に 
Zend Engine という言葉を 
聞いたことがありますか? 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
7 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 
PHPコアとは?
8 
PHPコアとは? 
PHPコアは 
PHPの内部システムで 
C言語によって 
記述されています 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
9 
PHPコアとは? 
PHPコアの 
言語エンジンは 
Zend Engine 
と呼ばれています 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
10 
PHPコアとは? 
Zend Engine は 
PHPスクリプトを 
字句解析・構文解析して 
オペコードと呼ばれる 
命令を作り出して実行します 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
11 
PHPコアとは? 
OS 
Apache 
Apacheモジュール 
PHPフレームワーク 
zendライブラリ 
phpライブラリ 
モジュール 
スクリプト 
PHPコア 
php_* ライブラリ 
zend_* ライブラリ 
Zend Engine 
字句解析 
構文解析 
実行 
オペコード 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
12 
PHPコアとは? 
PHPコアを知れば 
PHPがどのように 
動いているのか 
理解できます 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
13 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 
PHP5.5の主な新機能や変更点
14 
PHP5.5の主な新機能や変更点 
PHP5.5の主な 
新機能や変更点は 
次の通りでした 
(2014/8/28 に 
PHP5.6 が current stable) 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
15 
PHP5.5の主な新機能や変更点 
•ジェネレーターの追加 
•finally キーワードの追加 
•新しいパスワードハッシュAPI(password_*)追加 
•foreach が list() に対応 
•empty() が任意の式に対応 
•array リテラルと string リテラルのデリファレンス 
•OPcache 拡張モジュールの追加 
•array_column() 追加 
•boolval() 追加 
•json_last_error_msg() 追加 
•zend_execute() オーバーライド不可 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
16 
PHP5.5の主な新機能や変更点 
•ジェネレーターの追加 ← 新構文 
•finally キーワードの追加 
•新しいパスワードハッシュAPI(password_*)追加 
•foreach が list() に対応 
•empty() が任意の式に対応 
•array リテラルと string リテラルのデリファレンス 
•OPcache 拡張モジュールの追加 
•array_column() 追加 
•boolval() 追加 ← 新関数 
•json_last_error_msg() 追加 
•zend_execute() オーバーライド不可 ← 内部変更点 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
17 
PHP5.5の主な新機能や変更点 
赤字の項目について 
利用の是非や注意点を 
PHPコアの観点から 
ご紹介します! 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
18 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 
yield のコスト
19 
yield のコスト 
yield を使っている方はいますか? 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
20 
yield のコスト 
yield は簡単に 
イテレータを 
実装できる機能です 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
21 
yield のコスト 
イテレータは 
データの要素に 
アクセスするための 
仕組みです 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
22 
yield のコスト 
3つのファイルに 
それぞれ別の処理を行う 
スクリプトを例にとって 
みてみましょう 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
23 
yield のコスト 
yield を使わないスクリプト 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
24 
yield のコスト 
$file = fopen('./sample1.txt', 'r'); 
while(false !== ($line = fgets($file) ) ){ 
$line = trim($line); 
$text = $tmp . $line . "¥n"; 
echo($text); $tmp = $line; 
} 
fclose($file); 
現在の行に前の行を 
加えて表示 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
25 
yield のコスト 
$file = fopen('./sample2.txt', 'r'); 
while(false !== ($line = fgets($file) ) ){ 
$line = trim($line); 
$text = strtoupper($line) . "¥n"; 
echo($text); 
} 
fclose($file); 
現在の行を 
大文字にして表示 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
26 
yield のコスト 
$file = fopen('./sample3.txt', 'r'); 
while(false !== ($line = fgets($file) ) ){ 
$line = trim($line); 
$text = $line . ':' . md5($line) . "¥n"; 
echo($text); 
} 
fclose($file); 
現在の行と 
md5 を表示 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
27 
yield のコスト 
ファイルをオープンして 
1行ずつ読み込み 
ファイルをクローズする 
処理を毎回行っています 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
28 
yield のコスト 
yield を使ったスクリプト 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
29 
yield のコスト 
function file_lines($_filename){ 
$file = fopen($_filename, 'r'); 
while(false !== ($line = fgets($file) ) ){ 
$line = trim($line); 
yield $line; 
} 
fclose($file); 
} 
ファイルをオープンして 
1行ずつ読み込み 
ファイルをクローズ 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
30 
yield のコスト 
foreach(file_lines('./sample1.txt') as $line){ 
$text = $tmp . $line . "¥n"; 
echo($text); 
$tmp = $line; 
} 
現在の行に前の行を 
加えて表示 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
31 
yield のコスト 
foreach(file_lines('./sample2.txt') as $line){ 
$text = strtoupper($line) . "¥n"; 
echo($text); 
} 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 
現在の行を 
大文字にして表示
32 
yield のコスト 
foreach(file_lines('./sample3.txt') as $line){ 
$text = $line . ':' . md5($line) . "¥n"; 
echo($text); 
} 
現在の行と 
md5 を表示 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
33 
yield のコスト 
yield を使えば 
共通するイテレーション処理を 
1度定義するだけでよいです 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
34 
yield のコスト 
yield を使わない 
スクリプトの 
オペコードを 
確認してみましょう 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
35 
yield のコスト 
0 SEND_VAL 
1 SEND_VAL 
2 DO_FCALL 
3 ASSIGN 
4 SEND_VAR 
5 DO_FCALL 
6 ASSIGN 
7 IS_NOT_IDENTICAL 
8 JMPZ 
9 SEND_VAR 
10 DO_FCALL 
11 ASSIGN 
12 CONCAT 
13 CONCAT 
14 ASSIGN 
15 ECHO 
16 ASSIGN 
17 JMP 
18 SEND_VAR 
19DO_FCALL 
…… 
60 RETURN 
オペコードは 
60個 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
36 
yield のコスト 
yield を使った 
スクリプトの 
オペコードを 
確認してみましょう 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
37 
yield のコスト 
0 RECV 
1 SEND_VAR 
2 SEND_VAL 
3 DO_FCALL 
4 ASSIGN 
5 SEND_VAR 
6 DO_FCALL 
7 ASSIGN 
8 IS_NOT_IDENTICAL 
9 JMPZ 
10 SEND_VAR 
11 DO_FCALL 
12 ASSIGN 
13 YIELD 
14 JMP 
15 SEND_VAR 
16 DO_FCALL 
17 GENERATOR_RETURN 
関数の 
オペコードは 
17個 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
38 
yield のコスト 
0 INIT_FCALL_BY_NAME 
1 SEND_VAL 
2 DO_FCALL_BY_NAME 
3 FE_RESET 
4 FE_FETCH 
5 OP_DATA 
6 ASSIGN 
7 CONCAT 
8 CONCAT 
9 ASSIGN 
10 ECHO 
11 ASSIGN 
12 JMP 
13 SWITCH_FREE 
…… 
44 NOP 
45 RETURN 
メイン処理の 
オペコードは45個 
全部で62個 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
39 
yield のコスト 
yield を使ったスクリプトと 
使わないスクリプトの 
処理速度を比べてみましょう 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
40 
yield のコスト 
……と、その前に 
どちらの方が早いと 
思いますか? 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
41 
yield のコスト 
yield を使うスクリプト 
0.0034639835357666 usec 
yield を使わないスクリプト 
0.004425048828125 usec 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
42 
yield のコスト 
yield を使うと…… 
• コードがすっきりする 
• 処理が速くなる 
(遅くならない) 
• オペコードは短くならない 
(共通部分に依存する) 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
43 
yield のコスト 
簡単にイテレータを 
実装できるので 
積極的に使いましょう! 
結論 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
44 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 
boolval() の可否
45 
boolval() の可否 
boolval() を使っている方はいますか? 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
46 
boolval() の可否 
boolval() は 
boolean として 
値を取得できる 
関数です 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
47 
boolval() の可否 
値の型を変換する 
cast と 
同じ機能です 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
48 
boolval() の可否 
様々な型の値を 
変換するスクリプトを 
例にとってみてみましょう 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
49 
boolval() の可否 
cast を使ったスクリプト 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
$max = 1000; 
$arr = array('aaa', 'bbb' , 'ccc'); 
class A{}; 
$ca = new A(); 
for($i = 0; $i < $max; $i++){ 
$ret = (bool)(1000); 
$ret = (bool)('abc'); 
$ret = (bool)($arr); 
$ret = (bool)($ca); 
} 
50 
boolval() の可否 
色々な値を 
cast 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
51 
boolval() の可否 
boolval() を使ったスクリプト 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
$max = 1000; 
$arr = array('aaa', 'bbb' , 'ccc'); 
class A{}; 
$ca = new A(); 
for($i = 0; $i < $max; $i++){ 
$ret = boolval(1000); 
$ret = boolval('abc'); 
$ret = boolval($arr); 
$ret = boolval($ca); 
} 
52 
boolval() の可否 
色々な値を 
boolval() 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
53 
boolval() の可否 
cast を使った 
スクリプトの 
オペコードを 
みてみましょう 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
54 
boolval() の可否 
…… 
16 CAST 
17 ASSIGN 
18 CAST 
19 ASSIGN 
20 CAST 
21 ASSIGN 
22 CAST 
23 ASSIGN 
24 JMP 
25 RETURN 
オペコードは 
25個 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
55 
boolval() の可否 
boolval() を 
使ったスクリプトの 
オペコードを 
みてみましょう 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
56 
boolval() の可否 
…… 
16 SEND_VAL 
17 DO_FCALL 
18 ASSIGN 
19 SEND_VAL 
20 DO_FCALL 
21 ASSIGN 
22 SEND_VAR 
23 DO_FCALL 
24 ASSIGN 
25 SEND_VAR 
26 DO_FCALL 
27 ASSIGN 
28 JMP 
29 RETURN 
オペコードは 
29個 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
57 
boolval() の可否 
cast を使ったスクリプトと 
boolval() を使ったスクリプトの 
処理速度を比べてみましょう 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
58 
boolval() の可否 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 
……と、その前に 
どちらの方が早いと 
思いますか?
59 
boolval() の可否 
boolval() を使ったスクリプト 
0.0013551712036133 usec 
cast を使ったスクリプト 
0.0006558895111084 usec 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
60 
boolval() の可否 
boolval() を使うと…… 
• コールバックとして渡せる 
• 処理が遅くなる 
• オペコードが多くなる 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
61 
boolval() の可否 
できる限り 
cast を使いましょう! 
結論 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
62 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 
zend_execute の実体化
63 
zend_execute の実体化 
execute 系関数は 
オペコードを実行する 
非常に重要な関数です 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
64 
zend_execute の実体化 
実行処理を 
オーバーライドする時に 
熟知が必要です 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
65 
zend_execute の実体化 
PHP5.5 以前と以後では 
扱い方が異なるので 
みてみましょう 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
66 
zend_execute の実体化 
PHP5.5 以前 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
// execute は関数 
ZEND_API void execute( 
zend_op_array *op_array TSRMLS_DC); 
// zend_execute は関数ポインタ 
ZEND_API void (*zend_execute)( 
zend_op_array *op_array TSRMLS_DC); 
67 
zend_execute の実体化 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
// zend_execute に execute を代入 
zend_execute = execute; 
// zend_execute を実行 
zend_execute(...); 
68 
zend_execute の実体化 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
69 
zend_execute の実体化 
PHP5.5 以後 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
// execute_ex は関数 
ZEND_API void execute_ex( 
zend_execute_data *execute_data TSRMLS_DC) 
// zend_execute_ex は関数ポインタ 
ZEND_API void (*zend_execute_ex)( 
zend_execute_data *execute_data TSRMLS_DC); 
70 
zend_execute の実体化 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
// zend_execute_ex に execute_ex を代入 
zend_execute_ex = execute_ex; 
// zend_execute は zend_execute_exを実行する関数 
ZEND_API void zend_execute( 
zend_op_array *op_array TSRMLS_DC); 
// zend_execute を実行 
zend_execute(...); 
71 
zend_execute の実体化 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
72 
zend_execute の実体化 
PHP5.5 以前と以後の 
execute 系関数を 
比べてみましょう 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
73 
zend_execute の実体化 
シンボル 
説明 
PHP5.5 
以前 
PHP5.5 
以後 
execute_ex 
関数の実体 
× 
○ 
zend_execute_ex 
execute_ex を代入 
× 
△ 
execute 
関数の実体 
○ 
× 
zend_execute 
PHP5.5 以前と 
以後で存在するが 
扱いは異なる 
△ 
○ 
○:関数 △:関数ポインタ ×:なし 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
74 
zend_execute の実体化 
役割 
PHP5.5 以前 
PHP5.5 以後 
実行関数 
execute 
execute_ex 
関数ポインタ 
zend_execute 
zend_execute_ex 
ラッパー関数 
- 
zend_execute 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 
内部的な _ex 系関数に移行したが 
zend_execute は健在
75 
zend_execute の実体化 
zend_execute() 
↓ 
(*zend_execute_ex)() = execute_ex() 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
76 
zend_execute の実体化 
実行処理を 
オーバーライド 
したければ…… 
• zend_execute_ex に 
関数のポインタを代入する 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
77 
zend_execute の実体化 
execute 系関数の 
取り扱いに 
気を付けましょう! 
結論 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
78 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 
終わりに
79 
終わりに 
構文や関数について 
新しい気付きや興味は 
得られましたか? 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
80 
終わりに 
PHP に対する 
理解が深まるので 
PHPコアについて 
是非興味をもってください! 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
81 
ありがとうございました 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
82 
! 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
83 
Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 
Yahoo! JAPANブースにお立ち寄りください 
アンケートにご回答いただいた方に 
Yahoo! JAPANオリジナルグッズを 
差し上げています

More Related Content

What's hot

PHP, Now and Then 2011
PHP, Now and Then 2011PHP, Now and Then 2011
PHP, Now and Then 2011Rui Hirokawa
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)Rui Hirokawa
 
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)Rui Hirokawa
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方do_aki
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説do_aki
 
Introduction to cython
Introduction to cythonIntroduction to cython
Introduction to cythonAtsuo Ishimoto
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話y-uti
 
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツールPyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツールAtsuo Ishimoto
 
Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Atsuo Ishimoto
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarSotaro Karasawa
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とdo_aki
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Kei IWASAKI
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチンyohhoy
 
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)do_aki
 
Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.ContextAkira Takahashi
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )hiro345
 
Cloud TPU Driver API ソースコード解析
Cloud TPU Driver API ソースコード解析Cloud TPU Driver API ソースコード解析
Cloud TPU Driver API ソースコード解析Mr. Vengineer
 

What's hot (20)

HHVM Hack
HHVM HackHHVM Hack
HHVM Hack
 
PHP, Now and Then 2011
PHP, Now and Then 2011PHP, Now and Then 2011
PHP, Now and Then 2011
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
 
実"戦"CakePHP Plugin
実"戦"CakePHP Plugin実"戦"CakePHP Plugin
実"戦"CakePHP Plugin
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
Introduction to cython
Introduction to cythonIntroduction to cython
Introduction to cython
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話
 
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツールPyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
 
Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)
 
Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.Context
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
 
Cloud TPU Driver API ソースコード解析
Cloud TPU Driver API ソースコード解析Cloud TPU Driver API ソースコード解析
Cloud TPU Driver API ソースコード解析
 

Viewers also liked

PHP カンファレンス 2014 に行ってきたよ
PHP カンファレンス 2014 に行ってきたよPHP カンファレンス 2014 に行ってきたよ
PHP カンファレンス 2014 に行ってきたよMasaru Matsuo
 
SQLまで使える高機能NoSQLであるCouchbase Serverの勉強会資料
SQLまで使える高機能NoSQLであるCouchbase Serverの勉強会資料SQLまで使える高機能NoSQLであるCouchbase Serverの勉強会資料
SQLまで使える高機能NoSQLであるCouchbase Serverの勉強会資料樽八 仲川
 
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニングクラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニングTerui Masashi
 
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったかHiroshi Tokumaru
 
ストリートアカデミー_ローンチ前企画書
ストリートアカデミー_ローンチ前企画書ストリートアカデミー_ローンチ前企画書
ストリートアカデミー_ローンチ前企画書Find Job Startup
 

Viewers also liked (6)

MongoDB3.2の紹介
MongoDB3.2の紹介MongoDB3.2の紹介
MongoDB3.2の紹介
 
PHP カンファレンス 2014 に行ってきたよ
PHP カンファレンス 2014 に行ってきたよPHP カンファレンス 2014 に行ってきたよ
PHP カンファレンス 2014 に行ってきたよ
 
SQLまで使える高機能NoSQLであるCouchbase Serverの勉強会資料
SQLまで使える高機能NoSQLであるCouchbase Serverの勉強会資料SQLまで使える高機能NoSQLであるCouchbase Serverの勉強会資料
SQLまで使える高機能NoSQLであるCouchbase Serverの勉強会資料
 
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニングクラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
 
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
 
ストリートアカデミー_ローンチ前企画書
ストリートアカデミー_ローンチ前企画書ストリートアカデミー_ローンチ前企画書
ストリートアカデミー_ローンチ前企画書
 

Similar to PHPコアから読み解くPHP5.5

Php5 4勉強会
Php5 4勉強会Php5 4勉強会
Php5 4勉強会Yuji Otani
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]David Buck
 
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Inc.
 
Nashorn in the future (Japanese)
Nashorn in the future (Japanese)Nashorn in the future (Japanese)
Nashorn in the future (Japanese)Logico
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2Masatoshi Tada
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーAyumu Kawaguchi
 
Laravelとテストについて
LaravelとテストについてLaravelとテストについて
LaravelとテストについてTakeo Noda
 
レガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合うレガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合うYuta Ohashi
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGUehara Junji
 
Gura プログラミング言語の紹介
Gura プログラミング言語の紹介Gura プログラミング言語の紹介
Gura プログラミング言語の紹介Yutaka Saito
 
スクリプト言語入門 - シェル芸のすすめ - 第2回クラウド勉強会
スクリプト言語入門 - シェル芸のすすめ - 第2回クラウド勉強会スクリプト言語入門 - シェル芸のすすめ - 第2回クラウド勉強会
スクリプト言語入門 - シェル芸のすすめ - 第2回クラウド勉強会Makoto SAKAI
 
Php in ruby
Php in rubyPhp in ruby
Php in rubydo_aki
 
R超入門機械学習をはじめよう
R超入門機械学習をはじめようR超入門機械学習をはじめよう
R超入門機械学習をはじめよう幹雄 小川
 
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginerPhpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginerHideo Kashioka
 
技術勉強会(Solr入門編)
技術勉強会(Solr入門編)技術勉強会(Solr入門編)
技術勉強会(Solr入門編)Atsushi Takayasu
 
PHPの今とこれから2023
PHPの今とこれから2023PHPの今とこれから2023
PHPの今とこれから2023Rui Hirokawa
 

Similar to PHPコアから読み解くPHP5.5 (20)

Lithium Labo #1
Lithium Labo #1Lithium Labo #1
Lithium Labo #1
 
Impalaチューニングポイントベストプラクティス
ImpalaチューニングポイントベストプラクティスImpalaチューニングポイントベストプラクティス
Impalaチューニングポイントベストプラクティス
 
Php5 4勉強会
Php5 4勉強会Php5 4勉強会
Php5 4勉強会
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
 
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説
 
Nashorn in the future (Japanese)
Nashorn in the future (Japanese)Nashorn in the future (Japanese)
Nashorn in the future (Japanese)
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
 
Laravelとテストについて
LaravelとテストについてLaravelとテストについて
Laravelとテストについて
 
Yahoo! JAPANにおけるApache Cassandraへの取り組み
Yahoo! JAPANにおけるApache Cassandraへの取り組みYahoo! JAPANにおけるApache Cassandraへの取り組み
Yahoo! JAPANにおけるApache Cassandraへの取り組み
 
2018/2/20 Kotlin勉強会
2018/2/20 Kotlin勉強会2018/2/20 Kotlin勉強会
2018/2/20 Kotlin勉強会
 
レガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合うレガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合う
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
 
Gura プログラミング言語の紹介
Gura プログラミング言語の紹介Gura プログラミング言語の紹介
Gura プログラミング言語の紹介
 
スクリプト言語入門 - シェル芸のすすめ - 第2回クラウド勉強会
スクリプト言語入門 - シェル芸のすすめ - 第2回クラウド勉強会スクリプト言語入門 - シェル芸のすすめ - 第2回クラウド勉強会
スクリプト言語入門 - シェル芸のすすめ - 第2回クラウド勉強会
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
 
R超入門機械学習をはじめよう
R超入門機械学習をはじめようR超入門機械学習をはじめよう
R超入門機械学習をはじめよう
 
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginerPhpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginer
 
技術勉強会(Solr入門編)
技術勉強会(Solr入門編)技術勉強会(Solr入門編)
技術勉強会(Solr入門編)
 
PHPの今とこれから2023
PHPの今とこれから2023PHPの今とこれから2023
PHPの今とこれから2023
 

More from Yahoo!デベロッパーネットワーク

ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかYahoo!デベロッパーネットワーク
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2Yahoo!デベロッパーネットワーク
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcYahoo!デベロッパーネットワーク
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo!デベロッパーネットワーク
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcYahoo!デベロッパーネットワーク
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtcYahoo!デベロッパーネットワーク
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcPC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcYahoo!デベロッパーネットワーク
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcモブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcYahoo!デベロッパーネットワーク
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcYahoo!デベロッパーネットワーク
 

More from Yahoo!デベロッパーネットワーク (20)

ゼロから始める転移学習
ゼロから始める転移学習ゼロから始める転移学習
ゼロから始める転移学習
 
継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
 
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
 
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッションオンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッション
 
LakeTahoe
LakeTahoeLakeTahoe
LakeTahoe
 
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
 
Persistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability FeaturePersistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability Feature
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
 
eコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtceコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtc
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
 
ビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtcビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtc
 
サイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtcサイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtc
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
 
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtcYahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcPC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcモブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
 
「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
 

PHPコアから読み解くPHP5.5

  • 1. 1 ヤフー株式会社 蒋池 東龍 (こもいけ とうりゅう) PHPコアから読み解く PHP5.5
  • 2. 2 レジュメ •最初に(1分) •PHPコアとは?(3分) •PHP5.5の主な新機能や変更点(2分) •yield のコスト(10分) •boolval() の可否(8分) •zend_execute の実体化(5分) •終わりに(1分) Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 3. 3 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 最初に
  • 4. 4 最初に PHP5.5 以上を使っていますか? Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 5. 5 最初に PHPコア という言葉を 聞いたことがありますか? Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 6. 6 最初に Zend Engine という言葉を 聞いたことがありますか? Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 7. 7 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 PHPコアとは?
  • 8. 8 PHPコアとは? PHPコアは PHPの内部システムで C言語によって 記述されています Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 9. 9 PHPコアとは? PHPコアの 言語エンジンは Zend Engine と呼ばれています Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 10. 10 PHPコアとは? Zend Engine は PHPスクリプトを 字句解析・構文解析して オペコードと呼ばれる 命令を作り出して実行します Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 11. 11 PHPコアとは? OS Apache Apacheモジュール PHPフレームワーク zendライブラリ phpライブラリ モジュール スクリプト PHPコア php_* ライブラリ zend_* ライブラリ Zend Engine 字句解析 構文解析 実行 オペコード Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 12. 12 PHPコアとは? PHPコアを知れば PHPがどのように 動いているのか 理解できます Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 13. 13 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 PHP5.5の主な新機能や変更点
  • 14. 14 PHP5.5の主な新機能や変更点 PHP5.5の主な 新機能や変更点は 次の通りでした (2014/8/28 に PHP5.6 が current stable) Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 15. 15 PHP5.5の主な新機能や変更点 •ジェネレーターの追加 •finally キーワードの追加 •新しいパスワードハッシュAPI(password_*)追加 •foreach が list() に対応 •empty() が任意の式に対応 •array リテラルと string リテラルのデリファレンス •OPcache 拡張モジュールの追加 •array_column() 追加 •boolval() 追加 •json_last_error_msg() 追加 •zend_execute() オーバーライド不可 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 16. 16 PHP5.5の主な新機能や変更点 •ジェネレーターの追加 ← 新構文 •finally キーワードの追加 •新しいパスワードハッシュAPI(password_*)追加 •foreach が list() に対応 •empty() が任意の式に対応 •array リテラルと string リテラルのデリファレンス •OPcache 拡張モジュールの追加 •array_column() 追加 •boolval() 追加 ← 新関数 •json_last_error_msg() 追加 •zend_execute() オーバーライド不可 ← 内部変更点 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 17. 17 PHP5.5の主な新機能や変更点 赤字の項目について 利用の是非や注意点を PHPコアの観点から ご紹介します! Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 18. 18 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 yield のコスト
  • 19. 19 yield のコスト yield を使っている方はいますか? Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 20. 20 yield のコスト yield は簡単に イテレータを 実装できる機能です Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 21. 21 yield のコスト イテレータは データの要素に アクセスするための 仕組みです Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 22. 22 yield のコスト 3つのファイルに それぞれ別の処理を行う スクリプトを例にとって みてみましょう Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 23. 23 yield のコスト yield を使わないスクリプト Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 24. 24 yield のコスト $file = fopen('./sample1.txt', 'r'); while(false !== ($line = fgets($file) ) ){ $line = trim($line); $text = $tmp . $line . "¥n"; echo($text); $tmp = $line; } fclose($file); 現在の行に前の行を 加えて表示 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 25. 25 yield のコスト $file = fopen('./sample2.txt', 'r'); while(false !== ($line = fgets($file) ) ){ $line = trim($line); $text = strtoupper($line) . "¥n"; echo($text); } fclose($file); 現在の行を 大文字にして表示 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 26. 26 yield のコスト $file = fopen('./sample3.txt', 'r'); while(false !== ($line = fgets($file) ) ){ $line = trim($line); $text = $line . ':' . md5($line) . "¥n"; echo($text); } fclose($file); 現在の行と md5 を表示 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 27. 27 yield のコスト ファイルをオープンして 1行ずつ読み込み ファイルをクローズする 処理を毎回行っています Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 28. 28 yield のコスト yield を使ったスクリプト Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 29. 29 yield のコスト function file_lines($_filename){ $file = fopen($_filename, 'r'); while(false !== ($line = fgets($file) ) ){ $line = trim($line); yield $line; } fclose($file); } ファイルをオープンして 1行ずつ読み込み ファイルをクローズ Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 30. 30 yield のコスト foreach(file_lines('./sample1.txt') as $line){ $text = $tmp . $line . "¥n"; echo($text); $tmp = $line; } 現在の行に前の行を 加えて表示 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 31. 31 yield のコスト foreach(file_lines('./sample2.txt') as $line){ $text = strtoupper($line) . "¥n"; echo($text); } Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 現在の行を 大文字にして表示
  • 32. 32 yield のコスト foreach(file_lines('./sample3.txt') as $line){ $text = $line . ':' . md5($line) . "¥n"; echo($text); } 現在の行と md5 を表示 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 33. 33 yield のコスト yield を使えば 共通するイテレーション処理を 1度定義するだけでよいです Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 34. 34 yield のコスト yield を使わない スクリプトの オペコードを 確認してみましょう Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 35. 35 yield のコスト 0 SEND_VAL 1 SEND_VAL 2 DO_FCALL 3 ASSIGN 4 SEND_VAR 5 DO_FCALL 6 ASSIGN 7 IS_NOT_IDENTICAL 8 JMPZ 9 SEND_VAR 10 DO_FCALL 11 ASSIGN 12 CONCAT 13 CONCAT 14 ASSIGN 15 ECHO 16 ASSIGN 17 JMP 18 SEND_VAR 19DO_FCALL …… 60 RETURN オペコードは 60個 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 36. 36 yield のコスト yield を使った スクリプトの オペコードを 確認してみましょう Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 37. 37 yield のコスト 0 RECV 1 SEND_VAR 2 SEND_VAL 3 DO_FCALL 4 ASSIGN 5 SEND_VAR 6 DO_FCALL 7 ASSIGN 8 IS_NOT_IDENTICAL 9 JMPZ 10 SEND_VAR 11 DO_FCALL 12 ASSIGN 13 YIELD 14 JMP 15 SEND_VAR 16 DO_FCALL 17 GENERATOR_RETURN 関数の オペコードは 17個 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 38. 38 yield のコスト 0 INIT_FCALL_BY_NAME 1 SEND_VAL 2 DO_FCALL_BY_NAME 3 FE_RESET 4 FE_FETCH 5 OP_DATA 6 ASSIGN 7 CONCAT 8 CONCAT 9 ASSIGN 10 ECHO 11 ASSIGN 12 JMP 13 SWITCH_FREE …… 44 NOP 45 RETURN メイン処理の オペコードは45個 全部で62個 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 39. 39 yield のコスト yield を使ったスクリプトと 使わないスクリプトの 処理速度を比べてみましょう Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 40. 40 yield のコスト ……と、その前に どちらの方が早いと 思いますか? Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 41. 41 yield のコスト yield を使うスクリプト 0.0034639835357666 usec yield を使わないスクリプト 0.004425048828125 usec Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 42. 42 yield のコスト yield を使うと…… • コードがすっきりする • 処理が速くなる (遅くならない) • オペコードは短くならない (共通部分に依存する) Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 43. 43 yield のコスト 簡単にイテレータを 実装できるので 積極的に使いましょう! 結論 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 44. 44 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 boolval() の可否
  • 45. 45 boolval() の可否 boolval() を使っている方はいますか? Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 46. 46 boolval() の可否 boolval() は boolean として 値を取得できる 関数です Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 47. 47 boolval() の可否 値の型を変換する cast と 同じ機能です Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 48. 48 boolval() の可否 様々な型の値を 変換するスクリプトを 例にとってみてみましょう Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 49. 49 boolval() の可否 cast を使ったスクリプト Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 50. $max = 1000; $arr = array('aaa', 'bbb' , 'ccc'); class A{}; $ca = new A(); for($i = 0; $i < $max; $i++){ $ret = (bool)(1000); $ret = (bool)('abc'); $ret = (bool)($arr); $ret = (bool)($ca); } 50 boolval() の可否 色々な値を cast Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 51. 51 boolval() の可否 boolval() を使ったスクリプト Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 52. $max = 1000; $arr = array('aaa', 'bbb' , 'ccc'); class A{}; $ca = new A(); for($i = 0; $i < $max; $i++){ $ret = boolval(1000); $ret = boolval('abc'); $ret = boolval($arr); $ret = boolval($ca); } 52 boolval() の可否 色々な値を boolval() Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 53. 53 boolval() の可否 cast を使った スクリプトの オペコードを みてみましょう Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 54. 54 boolval() の可否 …… 16 CAST 17 ASSIGN 18 CAST 19 ASSIGN 20 CAST 21 ASSIGN 22 CAST 23 ASSIGN 24 JMP 25 RETURN オペコードは 25個 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 55. 55 boolval() の可否 boolval() を 使ったスクリプトの オペコードを みてみましょう Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 56. 56 boolval() の可否 …… 16 SEND_VAL 17 DO_FCALL 18 ASSIGN 19 SEND_VAL 20 DO_FCALL 21 ASSIGN 22 SEND_VAR 23 DO_FCALL 24 ASSIGN 25 SEND_VAR 26 DO_FCALL 27 ASSIGN 28 JMP 29 RETURN オペコードは 29個 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 57. 57 boolval() の可否 cast を使ったスクリプトと boolval() を使ったスクリプトの 処理速度を比べてみましょう Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 58. 58 boolval() の可否 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 ……と、その前に どちらの方が早いと 思いますか?
  • 59. 59 boolval() の可否 boolval() を使ったスクリプト 0.0013551712036133 usec cast を使ったスクリプト 0.0006558895111084 usec Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 60. 60 boolval() の可否 boolval() を使うと…… • コールバックとして渡せる • 処理が遅くなる • オペコードが多くなる Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 61. 61 boolval() の可否 できる限り cast を使いましょう! 結論 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 62. 62 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 zend_execute の実体化
  • 63. 63 zend_execute の実体化 execute 系関数は オペコードを実行する 非常に重要な関数です Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 64. 64 zend_execute の実体化 実行処理を オーバーライドする時に 熟知が必要です Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 65. 65 zend_execute の実体化 PHP5.5 以前と以後では 扱い方が異なるので みてみましょう Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 66. 66 zend_execute の実体化 PHP5.5 以前 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 67. // execute は関数 ZEND_API void execute( zend_op_array *op_array TSRMLS_DC); // zend_execute は関数ポインタ ZEND_API void (*zend_execute)( zend_op_array *op_array TSRMLS_DC); 67 zend_execute の実体化 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 68. // zend_execute に execute を代入 zend_execute = execute; // zend_execute を実行 zend_execute(...); 68 zend_execute の実体化 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 69. 69 zend_execute の実体化 PHP5.5 以後 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 70. // execute_ex は関数 ZEND_API void execute_ex( zend_execute_data *execute_data TSRMLS_DC) // zend_execute_ex は関数ポインタ ZEND_API void (*zend_execute_ex)( zend_execute_data *execute_data TSRMLS_DC); 70 zend_execute の実体化 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 71. // zend_execute_ex に execute_ex を代入 zend_execute_ex = execute_ex; // zend_execute は zend_execute_exを実行する関数 ZEND_API void zend_execute( zend_op_array *op_array TSRMLS_DC); // zend_execute を実行 zend_execute(...); 71 zend_execute の実体化 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 72. 72 zend_execute の実体化 PHP5.5 以前と以後の execute 系関数を 比べてみましょう Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 73. 73 zend_execute の実体化 シンボル 説明 PHP5.5 以前 PHP5.5 以後 execute_ex 関数の実体 × ○ zend_execute_ex execute_ex を代入 × △ execute 関数の実体 ○ × zend_execute PHP5.5 以前と 以後で存在するが 扱いは異なる △ ○ ○:関数 △:関数ポインタ ×:なし Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 74. 74 zend_execute の実体化 役割 PHP5.5 以前 PHP5.5 以後 実行関数 execute execute_ex 関数ポインタ zend_execute zend_execute_ex ラッパー関数 - zend_execute Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 内部的な _ex 系関数に移行したが zend_execute は健在
  • 75. 75 zend_execute の実体化 zend_execute() ↓ (*zend_execute_ex)() = execute_ex() Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 76. 76 zend_execute の実体化 実行処理を オーバーライド したければ…… • zend_execute_ex に 関数のポインタを代入する Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 77. 77 zend_execute の実体化 execute 系関数の 取り扱いに 気を付けましょう! 結論 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 78. 78 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 終わりに
  • 79. 79 終わりに 構文や関数について 新しい気付きや興味は 得られましたか? Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 80. 80 終わりに PHP に対する 理解が深まるので PHPコアについて 是非興味をもってください! Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 81. 81 ありがとうございました Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 82. 82 ! Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
  • 83. 83 Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 Yahoo! JAPANブースにお立ち寄りください アンケートにご回答いただいた方に Yahoo! JAPANオリジナルグッズを 差し上げています