Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHP7.2で始める型宣言
Search
Yoshihide Taniguchi
December 06, 2017
Programming
0
570
PHP7.2で始める型宣言
Talked in EC Tech Meeting in GMO Pepabo inc
Yoshihide Taniguchi
December 06, 2017
Tweet
Share
More Decks by Yoshihide Taniguchi
See All by Yoshihide Taniguchi
PHP がフロントエンドエンジニアになってみた // from PHPer to Frontend
gs3
1
340
ISUCONのすゝめ // OUR ISUCON
gs3
3
1.4k
オブジェクト指向設計とデザインパターンの基礎 / Basics of object oriented design and design pattern
gs3
2
100k
1人から始める大規模Webアプリケーションの言語バージョンアップ / version up PHP in large scale application
gs3
20
5.2k
PHP 5.4 ~ 5.6 での追加機能のおさらいとバージョンアップへの誘い / php54 to 56 and version up
gs3
1
2.5k
あの日見たバグを僕達はまだ公式ドキュメントで見れない / The bug we saw that day
gs3
1
1.5k
ペパボを支える大統一CI基盤と人々
gs3
2
4.2k
PHP 5.3.x のアプリを PHP 7.0.x で動かすためにした n 個のこと
gs3
1
1.6k
今までやってきたこと これからやりたいこと
gs3
0
2.4k
Other Decks in Programming
See All in Programming
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
2
590
ゲームの物理 剛体編
fadis
0
370
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
10
1.4k
Python札幌 LT資料
t3tra
6
1k
Jetpack XR SDKから紐解くAndroid XR開発と技術選定のヒント / about-androidxr-and-jetpack-xr-sdk
drumath2237
1
190
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
170
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
110
大規模Cloud Native環境におけるFalcoの運用
owlinux1000
0
190
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
250
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
11
3.8k
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
360
tparseでgo testの出力を見やすくする
utgwkk
2
280
Featured
See All Featured
Unsuck your backbone
ammeep
671
58k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.4k
The untapped power of vector embeddings
frankvandijk
1
1.5k
My Coaching Mixtape
mlcsv
0
13
Speed Design
sergeychernyshev
33
1.4k
Test your architecture with Archunit
thirion
1
2.1k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
1
860
Between Models and Reality
mayunak
0
150
The SEO Collaboration Effect
kristinabergwall1
0
310
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
410
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
97
Crafting Experiences
bethany
0
22
Transcript
1)1Ͱ࢝ΊΔܕએݴ &$5&$).&&5*/( !SBWFMMM
w ࣾͰ1)1Yͷػӡ͕ͲΜͲΜߴ·͍ͬͯ·͢ w ॲཧ͕ߴԽ͢Δ͚ͩͰͳ͘ɺͰ͖Δ͜ͱ͕૿͑·͢ w ͦͷதͰɺ1)1͔Β͖߹͍ํ͕มΘΔɾม͑Δ ͱྑ͍֓೦͕͋Γ·͢ w ߴ࣭ͳιϑτΣΞΛ࡞Γ͍ͨɺ1)1Ͱɻ
w ൃදͷ༰Λ͖ͬͪΓ֮͑Δඞཁͳ͍Ͱ͢ w ͜ͷʹ͍Δਓ͕কདྷ1)1ͷίʔυΛॻ͘ͱ͖ʹ ʮͦ͏͍͍͑͋͋͏ػೳ͕͋ͬͨؾ͕͢Δʯͱ ࢥ͍ग़ͯ͠Β͑Εे w ػೳͷ͍ํௐΒΕΔ͚Ͳ ػೳͷଘࡏೳಈతʹͬͯΔਓҎ֎ؾ͚ͮͳ͍
ࠓճઆ໌͢Δػೳɿܕએݴ
class Calculator { public static function pow3(int $n) : int
{ return $n ** 3; } } try { print Calculator::pow3(3); } catch (TypeError $e) { print "TypeError!"; } // => 27
ܕએݴ w ݹ͘λΠϓώϯςΟϯάͱ w ϝιουؔͷҾɾฦΓͷܕΛࢦఆ͢Δػೳ w 1)1͔Βଘࡏ͕ͨ͠ɺόʔδϣϯ্͕͕ΔʹͭΕɺ ΑΓଟ͘ͷܕ͕ࢦఆͰ͖ΔΑ͏ʹͳͬͨ w ֤όʔδϣϯͰࢦఆͰ͖Δܕʹ͍ͭͯ
υΩϡϝϯτ˞ʹॻ͍ͯ͋Γ·͢ ˞IUUQQIQOFUNBOVBMKBGVODUJPOTBSHVNFOUTQIQGVODUJPOTBSHVNFOUTUZQFEFDMBSBUJPO
ܕએݴͷແ͍࣮
class Calculator { public static function pow3($n) { return $n
** 3; } } print Calculator::pow3(3); // => 27
class Calculator { public static function pow3($n) { return $n
** 3; } } print Calculator::pow3("string"); // ???
class Calculator { public static function pow3($n) { return $n
** 3; } } print Calculator::pow3("string"); // => 0
w จࣈྻΛೖྗͨ͠߹ w ֘ͷϝιουͰΤϥʔʹͳΒͳ͍͕ɺ ͦͦ·͍͠ೖྗͰͳ͘ɺ݁Ռͷແҙຯ w ଓ͘ॲཧͰΤϥʔʹͳͬͨͱ͖ɺσόοά͕ࠔʹ w (BSCBHFJO HBSCBHFPVU
w ແҙຯͳೖྗ͔Βແҙຯͳ݁Ռ͕ಘΒΕΔ
ҾΛνΣοΫͯ͠ΈΔ
class CalculateException extends Exception {} class Calculator { public static
function pow3($n) { if (!is_int($n)) { throw new CalculateException; } return $n ** 3; } } try { print Calculator::pow3('string'); } catch (CalculateException $e) { print 'Exception!!!'; } // => 'Exception!!!'
w Ҿ૿͑ͨͱ͖ʹՄಡੑ͕Լ͕Δ w &YDFQUJPO༧͞ΕΔΤϥʔͷରॲ๏Ͱ͋ͬͯɺ ͋ͬͯͳΒͳ͍ࣄ ࠓճͷ߹ͩͱจࣈྻΛೖྗ͢Δ͜ͱ ͷରॲ๏Ͱͳ͍ͷͰʁ w ෆਖ਼ͳೖྗͦͦड͚͚ͳ͍Α͏ʹ͍ͨ͠
ͦ͜Ͱܕએݴ
class Calculator { public static function pow3(int $n) : int
{ return $n ** 3; } } try { print Calculator::pow3(3); } catch (TypeError $e) { print "TypeError!"; } // => 27
class Calculator { public static function pow3(int $n) : int
{ return $n ** 3; } } try { print Calculator::pow3("string"); } catch (TypeError $e) { print "TypeError!"; } // => "TypeError!"
class Calculator { public static function pow3(int $n) : int
{ return $n ** 3; } } try { print Calculator::pow3("3"); } catch (TypeError $e) { print "TypeError!"; } // ???
class Calculator { public static function pow3(int $n) : int
{ return $n ** 3; } } try { print Calculator::pow3("3"); } catch (TypeError $e) { print "TypeError!"; } // => 27
declare(strict_types=1); class Calculator { public static function pow3(int $n) :
int { return $n ** 3; } } try { print Calculator::pow3("3"); } catch (TypeError $e) { print "TypeError!"; } // => "TypeError!" SF ☺
class Calculator { public static function pow3(int $n) : int
{ return $n ** 3; } } try { print Calculator::pow3(null); } catch (TypeError $e) { print "TypeError!"; } // ???
class Calculator { public static function pow3(int $n) : int
{ return $n ** 3; } } try { print Calculator::pow3(null); } catch (TypeError $e) { print "TypeError!"; } // => "TypeError!"
class Calculator { public static function pow3(?int $n) : int
{ return $n ** 3; } } try { print Calculator::pow3(null); } catch (TypeError $e) { print "TypeError!"; } // => 0 OVMMBCMF
w ܕએݴͰೖग़ྗΛ੍ݶ͢Δ w ؒҧ͍ͬͨํ͕Ͱ͖ͳ͍Α͏ʹ͢Δ w ޚతϓϩάϥϛϯάͷख๏ w ͍खʹաࣦ͕͋ͬͯඃ͕ٴͳ͍Α͏ʹ͢Δ w OPHBSCBHFBMMPXFEJO
w ͱ͍͏Α͏ͳ͜ͱ͕$PEF$PNQMFUFʹॻ͔ΕͯΔ w ձࣾͷຊ୨ʹ͋Γ·͢
IUUQTTQFBLFSEFDLDPNUXBEBQIQDPOGFSFODF ΑΓ࣮ફతͳ༰U@XBEB͞ΜͷεϥΠυΛಡΈ·͠ΐ͏
·ͱΊ w 1)1ʹܕએݴͱ͍͏ػೳ͕͋Δ w ܕએݴΛ͏͜ͱͰϝιουͷҾɾฦΓͷܕΛࢦఆͰ͖Δ w ೖྗΛ੍ݶ͢Δ͜ͱͰ͍ख͕ؒҧ͑Δ͜ͱΛࠔʹͰ͖Δ