Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHP7.2で始める型宣言
Search
Yoshihide Taniguchi
December 06, 2017
Programming
0
560
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
330
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.1k
PHP 5.4 ~ 5.6 での追加機能のおさらいとバージョンアップへの誘い / php54 to 56 and version up
gs3
1
2.4k
あの日見たバグを僕達はまだ公式ドキュメントで見れない / The bug we saw that day
gs3
1
1.5k
ペパボを支える大統一CI基盤と人々
gs3
2
4.1k
PHP 5.3.x のアプリを PHP 7.0.x で動かすためにした n 個のこと
gs3
1
1.6k
今までやってきたこと これからやりたいこと
gs3
0
2.3k
Other Decks in Programming
See All in Programming
AIコーディング道場勉強会#2 君(エンジニア)たちはどう生きるか
misakiotb
1
220
アンドパッドの Go 勉強会「 gopher 会」とその内容の紹介
andpad
0
220
Datadog RUM 本番導入までの道
shinter61
1
290
ktr0731/go-mcpでMCPサーバー作ってみた
takak2166
0
170
Haskell でアルゴリズムを抽象化する / 関数型言語で競技プログラミング
naoya
17
4.7k
Cloudflare Realtime と Workers でつくるサーバーレス WebRTC
nekoya3
0
410
実践ArchUnit ~実例による検証パターンの紹介~
ogiwarat
2
260
2度もゼロから書き直して、やっとブラウザでぬるぬる動くAIに辿り着いた話
tomoino
0
160
ReadMoreTextView
fornewid
1
440
C++20 射影変換
faithandbrave
0
480
つよそうにふるまい、つよい成果を出すのなら、つよいのかもしれない
irof
1
290
GraphRAGの仕組みまるわかり
tosuri13
7
400
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
134
9.3k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.8k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
4
180
Embracing the Ebb and Flow
colly
86
4.7k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
How to Ace a Technical Interview
jacobian
276
23k
Unsuck your backbone
ammeep
671
58k
Adopting Sorbet at Scale
ufuk
77
9.4k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
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 ೖྗΛ੍ݶ͢Δ͜ͱͰ͍ख͕ؒҧ͑Δ͜ͱΛࠔʹͰ͖Δ