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で始める型宣言 // Type declaration with PHP 7.2
Search
Yoshihide TANIGUCHI
December 06, 2017
Programming
0
290
PHP7.2で始める型宣言 // Type declaration with PHP 7.2
2017/12/06 社内テックミーティング
Yoshihide TANIGUCHI
December 06, 2017
Tweet
Share
More Decks by Yoshihide TANIGUCHI
See All by Yoshihide TANIGUCHI
スタディサプリ/Quipper オンラインミートアップ #1(Webエンジニア) / 新規サービス開発チームの紹介 / Studysapuri online meetup #1
ravelll
0
2.8k
Raspberry Pi と Netatmo と少しの ruby で作る二酸化炭素濃度モニター君
ravelll
0
95
Ruby の静的型チェックの話
ravelll
0
89
Quipperian and VimConf2019
ravelll
1
5.8k
さくらのフロントエンド さくらの Vue.js // vue.js in SAKURA
ravelll
3
4.5k
ISUCONのすゝめ // Shall we ISUCON ?
ravelll
0
120
オブジェクト指向設計とデザインパターンの基礎 / Basics of object oriented design and design pattern
ravelll
0
740
1人から始める大規模Webアプリケーションの言語バージョンアップ / Upgrade PHP in a large application
ravelll
0
160
PHP 5.4 ~ 5.6 での追加機能のおさらいとバージョンアップへの誘い / Re-introduce PHP5.4~5.6 and invitation for upgrading
ravelll
0
100
Other Decks in Programming
See All in Programming
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
560
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
170
[KNOTS 2026登壇資料]AIで拡張‧交差する プロダクト開発のプロセス および携わるメンバーの役割
hisatake
0
270
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
680
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
1k
組織で育むオブザーバビリティ
ryota_hnk
0
170
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
260
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
300
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
510
AIと一緒にレガシーに向き合ってみた
nyafunta9858
0
190
AIフル活用時代だからこそ学んでおきたい働き方の心得
shinoyu
0
130
Grafana:建立系統全知視角的捷徑
blueswen
0
330
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
180
Testing 201, or: Great Expectations
jmmastey
46
8k
Side Projects
sachag
455
43k
Ruling the World: When Life Gets Gamed
codingconduct
0
140
The Cult of Friendly URLs
andyhume
79
6.8k
Producing Creativity
orderedlist
PRO
348
40k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.6k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.1k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
280
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
72
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Darren the Foodie - Storyboard
khoart
PRO
2
2.4k
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 ೖྗΛ੍ݶ͢Δ͜ͱͰ͍ख͕ؒҧ͑Δ͜ͱΛࠔʹͰ͖Δ