Mais conteúdo relacionado
Semelhante a PHPの今とこれから2018 (20)
Mais de Rui Hirokawa (16)
PHPの今とこれから2018
- 6. PHP アンケート 2018
PHPでよく使うバージョンは?
1) 使ったことがない
2) PHP 5.x
3) PHP 7.x
6
<?php
echo “Hello!”;
?>
- 8. PHPリリースサイクル
8
2015 2016 2017 2018 2019 2020 2021
5.6
7.0
7.1
7.2
アクティブサポート セキュリティ修正のみ
2018/12/15
PHPのライフサイクル:3年(バグ修正:2年、セキュリティ修正のみ:1年)
EOL以降はセキュリティ関連の修正も提供されず、非常に危険です
2018年末、PHP5のEOLがついにやってきます
EOL 2018/12/31
https://wiki.php.net/rfc/releaseprocess
http://php.net/supported-versions.php
EOL 2018/12/3
EOL 2019/12/1
EOL 2020/11/30
- 9. PHPリリース情報
Release 5.6 7.0 7.1 7.2 変更
2017/11/23 7.0.26 7.1.12
2017/11/30 7.2.0 PHP 7.2.0
2018/1/4 5.6.33 7.0.27 7.1.13 7.2.1 CVE-2018-5711-5712 (gd,phar),14884 (http)
2018/2/1 7.1.14 7.2.2
2018/3/1 5.6.34 7.0.28 7.1.15 7.2.3 CVE-2018-7584 (buffer overflow)
2018/3/29 5.6.35 7.0.29 7.1.16 7.2.4 CVE-2018-10545(opcache)
2018/4/26 5.6.36 7.0.30 7.1.17 7.2.5 CVE-2018-10546-10549(ldap,icon,phar,heap/exif)
2018/5/24 7.1.18 7.2.6
2018/6/21 7.1.19 7.2.7
2018/7/19 5.6.37 7.0.31 7.1.20 7.2.8 CVE-2018-14883,14851 (heap/exif)
2018/8/16 7.1.21 7.2.9
2018/9/13 5.6.38 7.0.32 7.1.22 7.2.10 CVE-2018-17082 (Apache2/XSS)
2018/10/11 7.1.23 7.2.11
2018/11/8 7.1.24 7.2.12
2018/12/6 5.6.39 7.0.33 7.1.25 7.2.13 PHP 5.6/PHP 7.0 EOL, PHP 7.3.0 Release
9
大きなセキュリティ上の問題は発生せず。ただし、更新推奨
- 11. PHP7: より速く、快適に
Athlon II X4 640 3.0GHz, Ubuntu
11
PHP 7.3は若干の改善
Zend/bench.php
0
0.5
1
1.5
2
2.5
3
3.5
4
PHP 5.6 PHP 7.0 PHP 7.1 PHP 7.2 PHP 7.3
実行時間[s]
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
0
2
4
6
8
10
12
14
16
PHP 5.6 PHP 7.0 PHP 7.1 PHP 7.2 PHP 7.3
実行時間[s]
$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
Zend/microbench.php
- 12. PHP 7.3 改善/変更のポイント
12
if (TRUE) {
print <<EOS
Hello
EOS;
}
doc文字列の終端マーカ:インデントできるようになった、改行が不要に
終端マーカの位置でインデント(スペース挿入)を制御できる
注意:インデントを文字列よりも右に配置すると構文エラー(*)となる
注意:タブと空白の混用は禁止
heredoc/nowdoc構文が柔軟に
RFC: https://wiki.php.net/rfc/flexible_heredoc_nowdoc_syntaxes
if (TRUE) {
print <<EOS
Hello
EOS;
}
Hello
Hello
if (TRUE) {
print <<EOS
Hello
EOS;
}
Hello
* Parse error: Invalid indentation - tabs and spaces cannot be mixed
- 13. PHP 7.3 改善/変更のポイント
13
$s = "sTraße";
echo mb_strtoupper($s);
Mbstring: 完全な大文字・小文字変換のサポート
(文字数変化に対応、引用符・アポストロフィの扱い改善、変換速度改善)
echo mb_convert_case($s,MB_CASE_UPPER); // STRASSE
echo mb_convert_case($s,MB_CASE_UPPER_SIMPLE); // STRAßE
echo mb_convert_case($s,MB_CASE_FOLD); // strasse
echo mb_convert_case($s,MB_CASE_FOLD_SIMPLE); // straße
STRASSE
STRAßE PHP 7.2
PHP 7.3
echo mb_convert_case("'be'",MB_CASE_TITLE);
'Be'
'be' PHP 7.2
PHP 7.3
- 14. PHP 7.3 改善/変更のポイント
14
mb_ereg('(?<word>¥w+)', '国', $m);
Mbstring: mb_ereg_*() で名前付きキャプチャをサポート
mb_ereg_replace('¥s*(?<word>¥w+)¥s*', "_¥k<word>_¥k'word'_", ' foo ');
mb_ereg_replace() で置換文字列で名前付きキャプチャを使うための
¥k<> および ¥k‘’ 表記をサポート:
$m[0] = "国"
$m[1] = "国"
$m["word"] = "国"
_foo_foo_
- 15. PHP 7.3 改善/変更のポイント
15
session.cookie_samesite:
CookieにSameSiteディレクティブ (“Lax” または “Strict”)を追加
RFC: https://wiki.php.net/rfc/same-site-cookie
RFC 6265 (Cookie)の拡張提案: SameSite属性
CookieにSameSite属性を付与することで、クロスサイトへのリクエスト時に
Cookieヘッダを付与しなくなる (Chrome等ほぼ全てのブラウザでサポート)
CSRF攻撃対策
setcookie(), setrawcookie(),session_set_cookie_params()に
samesiteオプション追加
Set-Cookie: sess=abc123; path=/; SameSite=Lax
setcookie(‘foo’,’boo’,3600,[‘path’=>’/’,…
’samesite’=>’Strict’]);
- 16. PHP 7.3 改善/変更のポイント
16
$foo = [1,2,3];
if (is_array($foo) || $foo instanceof Countable) {
echo "countable";
}
関数追加: is_countable()
RFC: https://wiki.php.net/rfc/is-countable
$foo = [1,2,3];
if (is_countable($foo)) {
echo "countable";
}
$a = ['abc'=>‘A', 'def'=>‘B', 'ghi'=>‘C'];
echo array_key_first($a);
echo array_key_last($a);
関数追加: array_key_first()/array_key_last()
abc
ghi
- 17. PHP 7.3 改善/変更のポイント
17
$m = [1,2,3];
$a = $m[0];
$b =& $m[1];
$c =& $m[2];
listにおけるリファレンス代入
RFC: https://wiki.php.net/rfc/list_reference_assignment
$m = [1,2,3];
list($a, &$b, &$c) = $m;
$c = [1,2,3];
[$a, &$b, &$c] = $m;
または
PHP7.2まで PHP7.3
• 複数のリファレンス代入を一度に行うことができる
• 複数の代入の中で、リファレンス代入を任意に指定できる
- 18. PHP 7.3 改善/変更のポイント
18
<?php
$a = [1,2];
$b = [3,4];
$c = array_merge($a,
$b,
[5,6],
);
関数コール引数の末尾にカンマが使用可能に
RFC: https://wiki.php.net/rfc/trailing-comma-function-calls
- 19. PHP 7.3 改善/変更のポイント
19
PCREがPCRE2に更新
php-fpmでgetallheaders()が利用可能に
preg_quote()が’#’もエスケープするようになった
ftp転送モードのデフォルトがbinaryに
高分解能タイマー関数追加(ナノ秒):hrtime()
JsonException追加
廃止
大文字・小文字に依存しない定数:
define() の第三引数にtrueを指定するとdeprecaion警告を発生
(RFC: https://wiki.php.net/rfc/case_insensitive_constant_deprecation)
mbereg_*() 廃止 -> mb_ereg_*()
- 21. PHPのこれから
PHP 7.4開発が開始される。
プリロード
Typed Properties 2.0
21
https://wiki.php.net/rfc/typed_properties_v2
https://wiki.php.net/rfc/preload
class User {
public int $id;
public string $name;
public function __construct(int $id, string $name) {
$this->id = $id; $this->name = $name;
}
}
opcache.preload で指定されたPHPスクリプトがサーバ起動時に実行される
応答速度50%改善 (ZF2Test)
- 24. 24
PHP Conference 2018 の見どころ
1F大展示 2F小展示 4F梅 4F鶯 1F A+B 3F特別 6F D会
大規模PHPプロジェク
トでPHPUnitを3世代
アップグレードするため
にやったこと
PHPとブロックチェーン
を使ったWebアプリ開
発
LarabelでTDDを体
験しよう
独立したコアレイヤ
パターンによるPHP
アプリケーションの
実装
PHP初心者セッショ
ン
マイグレーションアン
チパターン
Cygamesにおける長
期運用タイトルのこれ
までとこれから
2018年のPHP環境を
考えてみた
継続的なバージョン
アップのためのテスト
戦略
PHP,Go,Elasticsear
chによる@cosmeを5
倍早くする取り組み
VOYAGEのエンジ
ニア評価制度ってど
んな感じなのか25
分でミニ再演
セキュア・アプリケー
ションのためのHTTP
設定
ランサーズの
CakePHP 1.3→2.8
移行
モノリシックなアプリ
ケーションにおけるフロ
ントエンド部品の共通
化
PHPは本当に遅いの
か
アーキテクチャ設計と
UX設計は同じなのか
PHPを選ぶ理由 ドキュメントルート配
下に全てのPHPファ
イルが置かれていた
環境をindex.php 1
個だけにした話
PHPでのgRPCクラ
イアント作成とユース
ケース
ユニットテストが入れら
れないレガシーなソー
スでCIが回せるように
なった
安全なWebアプリ
ケーションの作り方
2018
php-fpmをもっと理
解しよう
Larabelxレイヤード
アーキテクチャを実践
して得られた知見と反
省
PHP-FIGのHTTP
処理標準の設計は
なぜPSR-7/15/17
になったのか
Phalcon
Essentials
苦手!!フレームワーク
を克服するには
PHPを検査するPHP
を書く
PHPバージョンアップと
決済テストを支えたユ
ニットテスト
案外よくできている
MySQLというアプリ
ケーション
Domain Driven
Design
レビューで初心者イ
ンターンを一人前に
育てた話
技術者が企画力を
上げたら鬼に金棒
エンジニアだけで完全
内作化のOAチームを
立ち上げた話
Webサービスを育てる
ための組織作りと文化
作り
エンジニア経験5ヶ月
の新人がDDDやTDD、
コンポーネントを駆使
してクソコードを改革し
てきた話
PHPとApache
Sparkで始めるデータ
解析処理
php-srcと遊ぶよ!
LT
11:00
12:00
13:00
13:35
14:10
14:45
15:20
16:20
17:40