SlideShare a Scribd company logo
最近の PHP の話
内山 雄司 (@y__uti)
2016-05-18 社内勉強会
自己紹介
内山 雄司 (@y__uti)
◦ http://y-uti.hatenablog.jp/ (phpusers-ja)
仕事
◦ 受託開発の会社 (株式会社ピコラボ) でプログラマをしています
興味
◦ プログラミング言語処理系
◦ 機械学習
2016-05-18 社内勉強会 2
最新の PHP 使ってますか ?
2016-05-18 社内勉強会 3
PHP のバージョン
PHP の各バージョンのサポート状況
◦ http://php.net/supported-versions.php
現在の状況
◦ 5.4 サポート終了済み
◦ 5.5 2016 年 7 月 10 日で終了
◦ 5.6 2018 年 12 月 31 日で終了 (5.x 系の最後なので特別に長い)
◦ 7.0 2018 年 12 月 3 日で終了
ただしディストリビュータがパッチを提供し続ける場合もある
◦ 例: CentOS 7 は PHP 5.4 だが CentOS がパッチを提供し続けている
2016-05-18 社内勉強会 4
各バージョンの新機能
PHP マニュアルの「付録」を参照
◦ http://php.net/manual/ja/appendices.php
PHP 7.0 の新機能
◦ スカラー型宣言
◦ 戻り値の型宣言
◦ Null 合体演算子
◦ 宇宙船演算子
◦ 無名クラス
◦ Throwable インタフェース
◦ などなど
PHP 7 は「高速化」が宣伝されているが機能も結構増えている
2016-05-18 社内勉強会 5
その前におさらい
2016-05-18 社内勉強会 6
PHP 5.4 ~ PHP 5.6
昔はこういうのも書けなかった。
PHP 5.4 (2012-03-01)
◦ トレイト 正直私は全く使いこなせてないけど...
◦ 配列の短縮構文 array(1, 2, 3) を [1, 2, 3] と書けるように
PHP 5.5 (2013-06-20)
◦ ジェネレータ yield
◦ finally try-catch に finally を書けるように
◦ OPcache 標準搭載 (言語機能じゃないけど)
PHP 5.6 (2014-08-28)
◦ 可変個引数 ...$args と書けるように
◦ 累乗演算子 **
2016-05-18 社内勉強会 7
PHP 7.0 (2015-12-03)
2016-05-18 社内勉強会 8
スカラー型宣言
関数の引数にスカラー型も宣言できるようになった
2016-05-18 社内勉強会 9
<?php
function int_plus(int $a, int $b)
{
return $a + $b;
}
echo int_plus(1, 2); // 3
echo int_plus(1.6, 3.7); // 4
◦ 既定の動作:宣言された型に変換される
◦ 二番目の例では $a = 1, $b = 3 として関数が実行される
戻り値の型宣言
関数の戻り値の型を宣言できるようになった
2016-05-18 社内勉強会 10
<?php
function int_plus($a, $b): int
{
return $a + $b;
}
echo int_plus(1, 2); // 3
echo int_plus(1.6, 3.7); // 5
◦ 既定の動作:宣言された型に変換される
◦ 二番目の例では 1.6 + 3.7 = 5.3 が int に変換されて 5 が戻される
強い型付け
宣言された型と異なる場合にエラーとする
2016-05-18 社内勉強会 11
<?php
declare(strict_types = 1);
function int_plus(int $a, int $b)
{
return $a + $b;
}
echo int_plus(1.6, 3.7); // Error
◦ ファイル内で有効
◦ 戻り値の型宣言に対しても有効
強い型付け(面倒な話)
引数の型宣言:関数を呼び出すファイルに declare を書く
2016-05-18 社内勉強会 12
<?php
function int_plus(int $a, int $b)
{
return $a + $b;
}
<?php
declare(strict_types = 1);
echo int_plus(1.6, 3.7); // Error
強い型付け(面倒な話)
戻り値の型宣言:関数を定義するファイルに declare を書く
2016-05-18 社内勉強会 13
<?php
declare(strict_types = 1);
function int_plus($a, $b): int
{
return $a + $b;
}
<?php
echo int_plus(1.6, 3.7); // Error
Null 合体演算子
isset で調べて false なら既定値を使う処理を簡単に書ける
2016-05-18 社内勉強会 14
<?php
$arr = [ 'x' => 1, 'y' => 0 ];
echo $arr['x'] ?? 9; // 1
echo $arr['y'] ?? 9; // 0
echo $arr['z'] ?? 9; // 9
// ?: 演算子との違い
echo $arr['x'] ?: 9; // 1
echo $arr['y'] ?: 9; // 9
echo $arr['z'] ?: 9; // Notice
宇宙船演算子
両辺の大小関係を比較して -1, 0, 1 を返す
2016-05-18 社内勉強会 15
<?php
function cmp($a, $b)
{
return $a['x'] <=> $b['x'] ?: $a['y'] <=> $b['y'];
}
$data = [['x' => 3, 'y' => 2],
['x' => 3, 'y' => 0],
['x' => 2, 'y' => 5],
['x' => 2, 'y' => 7]];
usort($data, 'cmp');
無名クラス
クラスを定義してその場でインスタンスを作成できる
2016-05-18 社内勉強会 16
<?php
$logger = new class implements Logger {
...
};
◦ 以下はコンストラクタに引数を渡してインスタンスを生成する例
<?php
$foo = new class(10) extends SomeClass {
...
};
Throwable
すべての例外やエラーが実装する共通の基底インタフェース
2016-05-18 社内勉強会 17
<?php
$a = 0;
try {
$a->foo(); // E_ERROR (重大な実行時エラー)
} catch (Throwable $e) { // エラーも catch される
...
}
Throwable(面倒な話)
例外ハンドラがエラーも補足する
2016-05-18 社内勉強会 18
<?php
function exception_handler($e)
{
...
}
set_exception_handler('exception_handler');
$a = 0;
$a->foo(); // exception_handler が実行される
Throwable(面倒な話)
例外ハンドラの引数は Exception とは限らない
2016-05-18 社内勉強会 19
<?php
function exception_handler(Exception $e)
{
...
}
set_exception_handler('exception_handler');
$a = 0;
$a->foo(); // exception_handler で型エラー
◦ 型宣言を外す (PHP5, PHP7 兼用)
◦ Throwable に変更する (PHP7 専用)
もっと新しい PHP
2016-05-18 社内勉強会 20
将来の PHP の動向
PHP Wiki の RFC を参照
◦ https://wiki.php.net/rfc
PHP 7.1 の新機能
◦ Allow specifying keys in list()
◦ Square bracket syntax for array destructing assignment
◦ Generalize support of negative string offsets
◦ Support class constant visibility
◦ Void return type
◦ Catching multiple exception types
◦ Null coalescing assignment operator
◦ Nullable types (2016-05-18 時点では投票中の状況)
◦ などなど
2016-05-18 社内勉強会 21
Allow specifying keys in list()
list にキーを指定できるようになる
2016-05-18 社内勉強会 22
<?php
$p = ['x' => 2, 'y' => 3, 'z' => 4];
list ('x' => $x, 'y' => $y) = $p; // $x = 2, $y = 3
Square bracket syntax
for array destructuring assignment
list を角括弧で書けるようになる
2016-05-18 社内勉強会 23
<?php
$p = ['x' => 2, 'y' => 3, 'z' => 4];
['x' => $x, 'y' => $y] = $p; // $x = 2, $y = 3
Generalize
support of negative string offsets
文字列に負のオフセットを指定できるようになる
2016-05-18 社内勉強会 24
<?php
$s = 'Hello, world!';
echo $s[-6]; // w
◦ 負の値を指定すると末尾から数える
◦ なぜ "Generalize" ?
◦ 従来より substr 関数ではサポートされていた
◦ それを角括弧や他の文字列関数でも使えるようにした
Support class constant visibility
クラスの定数 (const) にアクセス権を指定できるようになる
2016-05-18 社内勉強会 25
<?php
class MyClass {
public const Foo = 1; // default
protected const Bar = 2;
private const Baz = 3;
}
Void return type
関数の戻り値の型宣言に void を指定できるようになる
2016-05-18 社内勉強会 26
<?php
function hello() : void
{
echo "Hello, world!¥n";
return 1; // error
}
hello();
◦ 呼ばれた時にエラーになる (静的に検出されるわけではない)
Catching multiple exception types
例外の catch を複数まとめて指定できるようになる
2016-05-18 社内勉強会 27
<?php
try {
...
} catch (Exception1 | Exception2 | Exception3 $e) {
...
}
Null coalescing assignment operator
Null 合体演算子と代入をまとめて使えるようになる
2016-05-18 社内勉強会 28
<?php
$param ??= 'default';
◦ $param が null なら 'default' が代入される
Nullable types (in voting)
関数の型宣言に null 許容型を指定できるようになる
2016-05-18 社内勉強会 29
<?php
function hello(?string $name)
{
$name ??= 'world';
echo "Hello, $name!¥n";
}
hello('Yuji'); // Hello, Yuji!
hello(null); // Hello, world!
hello(); // error
◦ 2016-05-18 時点では投票中 (ですが accept されるのは確実な状況)
PHP 7.1 のタイムテーブル
PHP Wiki の TODO を参照 (まだリンクされていないかも)
◦ https://wiki.php.net/todo/php71
順調に進めば 2016 年 12 月のリリース予定
◦ 6 ヶ月の pre-release 期間が 6 月に始まる予定
2016-05-18 社内勉強会 30
参考情報
Web 上にある日本語の説明記事 (公式サイト以外)
PHP7 で変わること (hnw 氏)
◦ http://d.hatena.ne.jp/hnw/20150525
PHP7.1 の新機能 (rana_kualu 氏)
◦ http://qiita.com/rana_kualu/items/476385b674d27339f911
2016-05-18 社内勉強会 31
まとめ
新しい PHP を使おう!
2016-05-18 社内勉強会 32

More Related Content

PDF
PHP の GC の話
PDF
Hack/HHVM 入門
PPTX
PHP AST 徹底解説
PDF
PHPの今とこれから 2013
PDF
OPcache の最適化器の今
PDF
PECL を数えてみた
PDF
PDF
PHPの今とこれから2014
PHP の GC の話
Hack/HHVM 入門
PHP AST 徹底解説
PHPの今とこれから 2013
OPcache の最適化器の今
PECL を数えてみた
PHPの今とこれから2014

What's hot (20)

PPTX
PHP と SAPI と ZendEngine3 と
PPTX
php-src の歩き方
PDF
PHPの今とこれから2021
PPTX
PHP AST 徹底解説(補遺)
PDF
最新PHP事情 (2000年7月22日,PHPカンファレンス)
PDF
PHPの今とこれから2019
PPT
PHP, Now and Then 2011
PDF
PHPの今とこれから2020
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
PDF
実"戦"CakePHP Plugin
PDF
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PPTX
php7's ast
PPTX
php and sapi and zendengine2 and...
PDF
CodeIgniter入門
PDF
omoon.org の裏側 〜FuelPHP の task 活用例〜
PPTX
Open Source System Administration Framework - Func
PPTX
Php in ruby
PDF
FuelPHPで3種のprofilerを使ってみた
PPTX
CMSとPerlで遊ぼう
PDF
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP と SAPI と ZendEngine3 と
php-src の歩き方
PHPの今とこれから2021
PHP AST 徹底解説(補遺)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
PHPの今とこれから2019
PHP, Now and Then 2011
PHPの今とこれから2020
15分でCakePHPを始める方法(Nseg 2013-11-09 )
実"戦"CakePHP Plugin
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
php7's ast
php and sapi and zendengine2 and...
CodeIgniter入門
omoon.org の裏側 〜FuelPHP の task 活用例〜
Open Source System Administration Framework - Func
Php in ruby
FuelPHPで3種のprofilerを使ってみた
CMSとPerlで遊ぼう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
Ad

Viewers also liked (20)

PDF
PHP7で変わること ——言語仕様とエンジンの改善ポイント
PDF
PHP7はなぜ速いのか
PDF
Laungage Update PHP編
PDF
夏の総決算 Blender と Unity
PDF
JIT for PHP を試した
PPTX
2016年4月のAWSサービスアップデートまとめ
PDF
Real World PHP in pixiv
ODP
フレームワーク
PPT
オープンソースカンファレンス2009Nagoya
PDF
Javaの好きなところ
PDF
8時間耐久 PHP構築の教室
PDF
Learning jQuery
KEY
Kawaz的jQuery入門
PDF
Webプログラマの為のUnity入門
PPTX
PHP選んで良かったこと
PDF
PHPカンファレンス2016 初心者セッション
PPT
Cake Php開発事例
PPT
CakePHP PHP Framework
PPTX
Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
PPTX
CI/CD with Rancher CLI + Jenkins
PHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7はなぜ速いのか
Laungage Update PHP編
夏の総決算 Blender と Unity
JIT for PHP を試した
2016年4月のAWSサービスアップデートまとめ
Real World PHP in pixiv
フレームワーク
オープンソースカンファレンス2009Nagoya
Javaの好きなところ
8時間耐久 PHP構築の教室
Learning jQuery
Kawaz的jQuery入門
Webプログラマの為のUnity入門
PHP選んで良かったこと
PHPカンファレンス2016 初心者セッション
Cake Php開発事例
CakePHP PHP Framework
Docker入門~word press環境を作ってみる ハンズオン編 ver1.4~ pulic
CI/CD with Rancher CLI + Jenkins
Ad

Similar to 最近の PHP の話 (20)

PDF
PHPの今とこれから2023
PPTX
知ってるようで意外と知らないPHPの便利関数
KEY
Mojoliciousをウェブ制作現場で使ってみてる
PDF
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜
PPTX
PHP7を魔改造した話
PDF
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
PDF
PHPの今とこれから2025 (PHP Conference Japan 2025)
PDF
Modern PHP Programming @ PFI Seminar
KEY
FuelPHPをさわってみて
PDF
System2 s2
PDF
Laravel の paginate は一体何をやっているのか
PDF
PHP5.5新機能「ジェネレータ」初心者入門
PDF
Php apocalypse
PDF
知って得する標準関数の使い方
ZIP
実践Sass 後編
PDF
第21回Creators MeetUp
PDF
PDF
PHPの今とこれから2024 at PHP Conference Japan 2024
PDF
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
PPTX
Php5 4勉強会
PHPの今とこれから2023
知ってるようで意外と知らないPHPの便利関数
Mojoliciousをウェブ制作現場で使ってみてる
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜
PHP7を魔改造した話
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
PHPの今とこれから2025 (PHP Conference Japan 2025)
Modern PHP Programming @ PFI Seminar
FuelPHPをさわってみて
System2 s2
Laravel の paginate は一体何をやっているのか
PHP5.5新機能「ジェネレータ」初心者入門
Php apocalypse
知って得する標準関数の使い方
実践Sass 後編
第21回Creators MeetUp
PHPの今とこれから2024 at PHP Conference Japan 2024
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
Php5 4勉強会

More from y-uti (20)

PDF
潜在ディリクレ配分法
PDF
Active Object
PDF
目で見る過学習と正則化
PDF
ロジスティック回帰入門
PDF
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
PDF
PECL operator で演算子オーバーロード
PDF
PHP-ML で手書き数字認識
PDF
スパース推定
PDF
Kaggle の Titanic チュートリアルに挑戦した話
PDF
PHP カンファレンス福岡 2017 参加報告
PDF
分類問題 - 機械学習ライブラリ scikit-learn の活用
PDF
JIT のコードを読んでみた
PDF
Task Spooler を試した
PDF
anyenv + phpenv + php-build が便利すぎる件
PDF
PHP カンファレンス福岡 参加報告
PDF
RFC: "var" Deprecation
PDF
Windows で拡張モジュールをビルドしてみた
PDF
Windows で PHP をビルドしてみた
PDF
逐次ベイズ学習 - サンプリング近似法の場合 -
PDF
各言語の k-means 比較
潜在ディリクレ配分法
Active Object
目で見る過学習と正則化
ロジスティック回帰入門
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
PECL operator で演算子オーバーロード
PHP-ML で手書き数字認識
スパース推定
Kaggle の Titanic チュートリアルに挑戦した話
PHP カンファレンス福岡 2017 参加報告
分類問題 - 機械学習ライブラリ scikit-learn の活用
JIT のコードを読んでみた
Task Spooler を試した
anyenv + phpenv + php-build が便利すぎる件
PHP カンファレンス福岡 参加報告
RFC: "var" Deprecation
Windows で拡張モジュールをビルドしてみた
Windows で PHP をビルドしてみた
逐次ベイズ学習 - サンプリング近似法の場合 -
各言語の k-means 比較

最近の PHP の話