SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
PHP 8.0 の新記法を

試してみよう!

2021/05/29 PHP カンファレンス沖縄 2021

@okashoi

岡田 正平/おかしょい

Twitter: @okashoi

GitHub: @okashoi

所属:株式会社ウィルゲート



登壇:









寄稿:

岡田 正平/おかしょい

Twitter: @okashoi

GitHub: @okashoi

所属:株式会社ウィルゲート



登壇:









寄稿:

(バーチャルの姿)
2020/11/26

PHP 8.0 で追加された新しい構文や関数の中から

すぐに使えそうなものをピックアップ、勢いにまかせて紹介





この発表のゴール

● 聴いた人が PHP 8.0 を使いたくなる

● 聴いた人がこの発表で知った構文を実際に使う

本発表の趣旨

本発表は『WEB+DB PRESS vol. 120』に寄稿した

「5 年ぶりの新版!PHP 8 登場」の内容をベースに

5 分間にぎゅっと詰め込んだものです

おことわり

※また、日本語訳は 

 私の独断によるものです 

str_〇〇 関数

str_contains() 関数

<?php
var_dump(str_contains('Hello, PHP8!', 'PHP'));
var_dump(str_contains('Hello, PHP8!', 'PHP7'));
/* 実行結果
bool(true)
bool(false)
*/
str_starts_with(), str_ends_with() 関数

<?php
var_dump(str_starts_with('Hello, PHP8!', 'Hello'));
var_dump(str_starts_with('Hello, PHP8!', 'PHP8!'));
var_dump(str_ends_with('Hello, PHP8!', 'Hello'));
var_dump(str_ends_with('Hello, PHP8!', 'PHP8!'));
/* 実行結果
bool(true)
bool(false)
bool(false)
bool(true)
*/
PHP 7 系以前では......

<?php
// str_contains()相当
function my_str_contains(string $a, string $b): bool
{
return strpos($a, $b) !== false;
}
// str_starts_with()相当
function my_str_starts_with(string $a, string $b): bool
{
return strpos($a, $b) === 0;
}
// str_ends_with()相当
function my_str_ends_with(string $a, string $b): bool
{
return strrpos($a, $b) === strlen($a) - strlen($b);
}
null 安全演算子

null 安全演算子 ?->

<?php
// $user が null の場合もエラーにならない
$user?->changeName('okashoi');
// PHP 7 系以前では例えばこうしていた
is_null($user) ?: $user->changeName('okashoi');
メソッドをチェインさせたいときに便利

<?php
function example1(?Foo $foo): ?FooBar
{
if(is_null($foo)) {
return null;
}
$bar = $foo->bar();
if(is_null($bar)) {
return null;
}
$buz = $bar->buz();
if(is_null($buz)) {
return null;
}
return $buz->foobar();
}
<?php
function example2(?Foo $foo): ?FooBar
{
return $foo?->bar()
?->buz()
?->foobar();
}
match 式

match 式

<?php
$english = match (1) {
1 => 'one',
2 => 'two',
3 => 'three',
default => 'more than three',
};
var_dump($english);
/* 実行結果
string(3) "one"
*/
※ “match” は予約語に 

1. 文(statement)ではなく式(expression)であること

2. break を書き忘れる心配がない

3. 厳密比較(===)が用いられる

4. 何にもマッチしないと UnhandledMatchError を送出

5. 右辺には単一の式しか指定できない(※)



※ Future scope として「ブロック」を指定できるようにする旨の議論あり

switch 文との違い

名前付き引数

名前付き引数

<?php
function setFullName(string $givenName, string $familyName): void
{
// 省略
}
// familyNameを先に指定できる
setFullName(familyName: '岡田', givenName: '正平');
union 型

union 型

<?php
// 引数にint型の値もfloat型の値も渡せる
// 戻り値はint型またはfloat型のどちらか
function square(int|float $x): int|float
{
return $x * $x;
}
mixed 型

mixed 型

<?php
function foo(mixed $value): mixed
{
return $value;
}
array|bool|callable|int|float|null|object|resource|string と同じ
もっと知りたい方は公式ドキュメントをチェック!

https://www.php.net/releases/8.0/







WEB+DB PRESS の記事(バックナンバー)もヨロシク 

まだまだたくさん新機能!

PHP 8.0 で追加された新しい構文や関数の中から

すぐに使えそうなものをピックアップ、勢いにまかせて紹介





この発表のゴール

● 聴いた人が PHP 8.0 を使いたくなる

● 聴いた人がこの発表で知った構文を実際に使う

本発表の趣旨(再掲)


Más contenido relacionado

Similar a PHP 8.0 の新記法を試してみよう!

PHPの「歴史的理由」ってなんだ!?を過去のPHPをPHP1まで遡って紹介していきます
PHPの「歴史的理由」ってなんだ!?を過去のPHPをPHP1まで遡って紹介していきますPHPの「歴史的理由」ってなんだ!?を過去のPHPをPHP1まで遡って紹介していきます
PHPの「歴史的理由」ってなんだ!?を過去のPHPをPHP1まで遡って紹介していきますSuguru Ohki
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-pluginIkuko Kanada
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-pluginFumito Mizuno
 
日本で一番PHPのシステムをテストしている手動テスターが思うところ:PHPカンファレンス福岡
日本で一番PHPのシステムをテストしている手動テスターが思うところ:PHPカンファレンス福岡日本で一番PHPのシステムをテストしている手動テスターが思うところ:PHPカンファレンス福岡
日本で一番PHPのシステムをテストしている手動テスターが思うところ:PHPカンファレンス福岡Rina Fukuda
 
4時間耐久 PHP on Heroku
4時間耐久 PHP on Heroku4時間耐久 PHP on Heroku
4時間耐久 PHP on HerokuYusuke Ando
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築You&I
 
excelファイルをプログラムで出力しよう
excelファイルをプログラムで出力しようexcelファイルをプログラムで出力しよう
excelファイルをプログラムで出力しようyuji0602
 
HTML5でOpen Dataをやってみた
HTML5でOpen DataをやってみたHTML5でOpen Dataをやってみた
HTML5でOpen DataをやってみたMasakazu Muraoka
 
Introducing hhvm hack-async
Introducing hhvm hack-asyncIntroducing hhvm hack-async
Introducing hhvm hack-asyncKenjiro Kubota
 
FuelPHP活用事例
FuelPHP活用事例FuelPHP活用事例
FuelPHP活用事例Yusuke Naka
 
PHPの今と未来を語る
PHPの今と未来を語るPHPの今と未来を語る
PHPの今と未来を語るRui Hirokawa
 
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い sasezaki
 
Opauthライブラリによるtwitter,facebook認証について
Opauthライブラリによるtwitter,facebook認証についてOpauthライブラリによるtwitter,facebook認証について
Opauthライブラリによるtwitter,facebook認証について松本 雄貴
 
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpSphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpTakeshi Komiya
 
20160730 fluentd meetup in matsue slide
20160730 fluentd meetup in matsue slide20160730 fluentd meetup in matsue slide
20160730 fluentd meetup in matsue slidecosmo0920
 
Php kansai-2013 lt-slide
Php kansai-2013 lt-slidePhp kansai-2013 lt-slide
Php kansai-2013 lt-slideHattori Hideo
 
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016Kei IWASAKI
 
PHPカンファレンス2021 スポンサー募集概要
PHPカンファレンス2021 スポンサー募集概要PHPカンファレンス2021 スポンサー募集概要
PHPカンファレンス2021 スポンサー募集概要裕介 原田
 

Similar a PHP 8.0 の新記法を試してみよう! (20)

PHPの「歴史的理由」ってなんだ!?を過去のPHPをPHP1まで遡って紹介していきます
PHPの「歴史的理由」ってなんだ!?を過去のPHPをPHP1まで遡って紹介していきますPHPの「歴史的理由」ってなんだ!?を過去のPHPをPHP1まで遡って紹介していきます
PHPの「歴史的理由」ってなんだ!?を過去のPHPをPHP1まで遡って紹介していきます
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-plugin
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-plugin
 
日本で一番PHPのシステムをテストしている手動テスターが思うところ:PHPカンファレンス福岡
日本で一番PHPのシステムをテストしている手動テスターが思うところ:PHPカンファレンス福岡日本で一番PHPのシステムをテストしている手動テスターが思うところ:PHPカンファレンス福岡
日本で一番PHPのシステムをテストしている手動テスターが思うところ:PHPカンファレンス福岡
 
4時間耐久 PHP on Heroku
4時間耐久 PHP on Heroku4時間耐久 PHP on Heroku
4時間耐久 PHP on Heroku
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 
Php+Word Press
Php+Word PressPhp+Word Press
Php+Word Press
 
excelファイルをプログラムで出力しよう
excelファイルをプログラムで出力しようexcelファイルをプログラムで出力しよう
excelファイルをプログラムで出力しよう
 
HTML5でOpen Dataをやってみた
HTML5でOpen DataをやってみたHTML5でOpen Dataをやってみた
HTML5でOpen Dataをやってみた
 
Introducing hhvm hack-async
Introducing hhvm hack-asyncIntroducing hhvm hack-async
Introducing hhvm hack-async
 
FuelPHP活用事例
FuelPHP活用事例FuelPHP活用事例
FuelPHP活用事例
 
PHPの今と未来を語る
PHPの今と未来を語るPHPの今と未来を語る
PHPの今と未来を語る
 
Yet Another Plugins
Yet Another PluginsYet Another Plugins
Yet Another Plugins
 
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
 
Opauthライブラリによるtwitter,facebook認証について
Opauthライブラリによるtwitter,facebook認証についてOpauthライブラリによるtwitter,facebook認証について
Opauthライブラリによるtwitter,facebook認証について
 
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpSphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
 
20160730 fluentd meetup in matsue slide
20160730 fluentd meetup in matsue slide20160730 fluentd meetup in matsue slide
20160730 fluentd meetup in matsue slide
 
Php kansai-2013 lt-slide
Php kansai-2013 lt-slidePhp kansai-2013 lt-slide
Php kansai-2013 lt-slide
 
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
 
PHPカンファレンス2021 スポンサー募集概要
PHPカンファレンス2021 スポンサー募集概要PHPカンファレンス2021 スポンサー募集概要
PHPカンファレンス2021 スポンサー募集概要
 

Más de Shohei Okada

「登壇しているひとは偉い」という話
「登壇しているひとは偉い」という話「登壇しているひとは偉い」という話
「登壇しているひとは偉い」という話Shohei Okada
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようShohei Okada
 
自分たちのコードを Composer パッケージに分割して開発する
自分たちのコードを Composer パッケージに分割して開発する自分たちのコードを Composer パッケージに分割して開発する
自分たちのコードを Composer パッケージに分割して開発するShohei Okada
 
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumai
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumaiクリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumai
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumaiShohei Okada
 
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawaクリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawaShohei Okada
 
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondo
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondoクリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondo
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondoShohei Okada
 
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfukLaravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfukShohei Okada
 
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyoエラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyoShohei Okada
 
スペシャリストとして組織をつくる、というキャリア
スペシャリストとして組織をつくる、というキャリアスペシャリストとして組織をつくる、というキャリア
スペシャリストとして組織をつくる、というキャリアShohei Okada
 
PHP でも活用できる Makefile
PHP でも活用できる MakefilePHP でも活用できる Makefile
PHP でも活用できる MakefileShohei Okada
 
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよはじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよShohei Okada
 
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...Shohei Okada
 
働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソード働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソードShohei Okada
 
Laravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するならLaravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するならShohei Okada
 
Laravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミLaravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミShohei Okada
 
Laravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのかLaravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのかShohei Okada
 
2017 年度を振り返って ~アウトプット編~
2017 年度を振り返って ~アウトプット編~2017 年度を振り返って ~アウトプット編~
2017 年度を振り返って ~アウトプット編~Shohei Okada
 
Laravel × レイヤードアーキテクチャをやってみている話
Laravel × レイヤードアーキテクチャをやってみている話Laravel × レイヤードアーキテクチャをやってみている話
Laravel × レイヤードアーキテクチャをやってみている話Shohei Okada
 
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみたLaravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみたShohei Okada
 
チームで「きちんと」Laravel を使っていくための取り組み
チームで「きちんと」Laravel を使っていくための取り組みチームで「きちんと」Laravel を使っていくための取り組み
チームで「きちんと」Laravel を使っていくための取り組みShohei Okada
 

Más de Shohei Okada (20)

「登壇しているひとは偉い」という話
「登壇しているひとは偉い」という話「登壇しているひとは偉い」という話
「登壇しているひとは偉い」という話
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
 
自分たちのコードを Composer パッケージに分割して開発する
自分たちのコードを Composer パッケージに分割して開発する自分たちのコードを Composer パッケージに分割して開発する
自分たちのコードを Composer パッケージに分割して開発する
 
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumai
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumaiクリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumai
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumai
 
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawaクリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
 
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondo
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondoクリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondo
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondo
 
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfukLaravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
 
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyoエラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
 
スペシャリストとして組織をつくる、というキャリア
スペシャリストとして組織をつくる、というキャリアスペシャリストとして組織をつくる、というキャリア
スペシャリストとして組織をつくる、というキャリア
 
PHP でも活用できる Makefile
PHP でも活用できる MakefilePHP でも活用できる Makefile
PHP でも活用できる Makefile
 
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよはじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
 
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
 
働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソード働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソード
 
Laravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するならLaravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するなら
 
Laravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミLaravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミ
 
Laravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのかLaravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのか
 
2017 年度を振り返って ~アウトプット編~
2017 年度を振り返って ~アウトプット編~2017 年度を振り返って ~アウトプット編~
2017 年度を振り返って ~アウトプット編~
 
Laravel × レイヤードアーキテクチャをやってみている話
Laravel × レイヤードアーキテクチャをやってみている話Laravel × レイヤードアーキテクチャをやってみている話
Laravel × レイヤードアーキテクチャをやってみている話
 
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみたLaravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
 
チームで「きちんと」Laravel を使っていくための取り組み
チームで「きちんと」Laravel を使っていくための取り組みチームで「きちんと」Laravel を使っていくための取り組み
チームで「きちんと」Laravel を使っていくための取り組み
 

PHP 8.0 の新記法を試してみよう!