Slide 1

Slide 1 text

1)1FS,BJHJ ⶡ亠⺸❣㰆؅㲔杯׌׾ ꪐ氳鉮冪ٚؕهٚٛסׇ磆☭ 

Slide 2

Slide 2 text

 #"4&1SPEVDU%JWJTJPOմ䃷㼖䜔 !OB[POPIJUP 

Slide 3

Slide 3 text

-BZFSFE"SDIJUFDUVSF %FQFOEFODZ*OWFSTJPO 1SJODJQMF $MFBO"SDIJUFDUVSF

Slide 4

Slide 4 text

ಠཱͨ͠ίΞϨΠϠύλʔϯ΋͋Δͧʂ IUUQTCMPHTIJOYDPNFOUSZJOEFQFOEFOUDPSFMBZFSQBUUFSO

Slide 5

Slide 5 text

ؠٚتס❣㰆畘杼 ע׋״ױ׊ג

Slide 6

Slide 6 text

#VU

Slide 7

Slide 7 text

ゖ❣㰆׊יַ׾ؠٚت؅⪒י䧸ׅ׻  class SomeClass extends ParentClass implements SomeInterface { use SomeTrait; private $someClass1; public function __construct() { $this->someClass1 = new SomeClass1(SomeClass1::STATUS_OK); } public function someMethod(SomeClass1 $someClass1): SomeClass3 { try { $unknownClass = $someClass1->someMethod1($this->someClass1->property); if (!$unknownClass instanceof SomeClass2) { throw new SomeException(); } return $unknownClass->getSomeClass3(); } catch (SomeException $e) { // TODO: error handling } } /** * @return SomeClass2[] */ public function returnValueTypeByPhpDoc(): array { return [new SomeClass2(), new SomeClass2()]; } }

Slide 8

Slide 8 text

؂־׾־

Slide 9

Slide 9 text

䡘չ☔걉ֿ خنعؘؗؓס啶鵰؅ 䨿ֻ׾׆כעꦘ׊ַ

Slide 10

Slide 10 text

 ೴಺ઃܭ ίʔυ

Slide 11

Slide 11 text

 ೴಺ઃܭ ίʔυ 1)1TZOUBY QIQEPD FUD

Slide 12

Slide 12 text

鲣䇗ס1)1ע ꪐ氳מ 啶鵰؅䧏ח׻ֹמםזי׀ג TUBUJD

Slide 13

Slide 13 text

☪׆א1)1خنعؘؗؓס ꪐ氳啶鵰מ泘؅⺸ׄ׾侇

Slide 14

Slide 14 text

خنعؘؗؓס釤ֻ׾⴫  ӳӳ

Slide 15

Slide 15 text

IUUQTQBDLBHJTUPSHQBDLBHFTOB[POPIJUPEFQFOEFODZBOBMZ[FS EFQFOEFODZBOBMZ[FS

Slide 16

Slide 16 text

1PXFSFECZ  1)14UBO

Slide 17

Slide 17 text

ؠٚتס❣㰆꞊➟؅ 鉮冪׌׾ٚؕهٚٛ 

Slide 18

Slide 18 text

8IBUJT❣㰆꞊➟ 

Slide 19

Slide 19 text

ؕ٤ذ٭نؘ٭تֿ㚺催׈׿ג㕙⺬מ 䏅ꮶֿ氦榟׌׾꞊➟ 

Slide 20

Slide 20 text

ؕ٤ذ٭نؘ٭ت؅湳זיַ׾ ❣㰆ֵֿ׾ 

Slide 21

Slide 21 text

❆ֻף׆סؠٚتס㕙⺬  class SomeClass extends ParentClass implements SomeInterface { use SomeTrait; private $someClass1; public function __construct() { $this->someClass1 = new SomeClass1(SomeClass1::STATUS_OK); } public function someMethod(SomeClass1 $someClass1): SomeClass3 { try { $unknownClass = $someClass1->someMethod1($this->someClass1->property); if (!$unknownClass instanceof SomeClass2) { throw new SomeException(); } return $unknownClass->getSomeClass3(); } catch (SomeException $e) { // TODO: error handling } } /** * @return SomeClass2[] */ public function returnValueTypeByPhpDoc(): array { return [new SomeClass2(), new SomeClass2()]; } }

Slide 22

Slide 22 text

❆ֻף׆סؠٚتס㕙⺬  class SomeClass extends ParentClass implements SomeInterface { use SomeTrait; private $someClass1; public function __construct() { $this->someClass1 = new SomeClass1(SomeClass1::STATUS_OK); } public function someMethod(SomeClass1 $someClass1): SomeClass3 { try { $unknownClass = $someClass1->someMethod1($this->someClass1->property); if (!$unknownClass instanceof SomeClass2) { throw new SomeException(); } return $unknownClass->getSomeClass3(); } catch (SomeException $e) { // TODO: error handling } } /** * @return SomeClass2[] */ public function returnValueTypeByPhpDoc(): array { return [new SomeClass2(), new SomeClass2()]; } } UZQFIJOUJOH

Slide 23

Slide 23 text

❆ֻף׆סؠٚتס㕙⺬  class SomeClass extends ParentClass implements SomeInterface { use SomeTrait; private $someClass1; public function __construct() { $this->someClass1 = new SomeClass1(SomeClass1::STATUS_OK); } public function someMethod(SomeClass1 $someClass1): SomeClass3 { try { $unknownClass = $someClass1->someMethod1($this->someClass1->property); if (!$unknownClass instanceof SomeClass2) { throw new SomeException(); } return $unknownClass->getSomeClass3(); } catch (SomeException $e) { // TODO: error handling } } /** * @return SomeClass2[] */ public function returnValueTypeByPhpDoc(): array { return [new SomeClass2(), new SomeClass2()]; } } SFUVSOWBMVFUZQF

Slide 24

Slide 24 text

❆ֻף׆סؠٚتס㕙⺬  class SomeClass extends ParentClass implements SomeInterface { use SomeTrait; private $someClass1; public function __construct() { $this->someClass1 = new SomeClass1(SomeClass1::STATUS_OK); } public function someMethod(SomeClass1 $someClass1): SomeClass3 { try { $unknownClass = $someClass1->someMethod1($this->someClass1->property); if (!$unknownClass instanceof SomeClass2) { throw new SomeException(); } return $unknownClass->getSomeClass3(); } catch (SomeException $e) { // TODO: error handling } } /** * @return SomeClass2[] */ public function returnValueTypeByPhpDoc(): array { return [new SomeClass2(), new SomeClass2()]; } } OFXPCKFDU

Slide 25

Slide 25 text

❆ֻף׆סؠٚتס㕙⺬  class SomeClass extends ParentClass implements SomeInterface { use SomeTrait; private $someClass1; public function __construct() { $this->someClass1 = new SomeClass1(SomeClass1::STATUS_OK); } public function someMethod(SomeClass1 $someClass1): SomeClass3 { try { $unknownClass = $someClass1->someMethod1($this->someClass1->property); if (!$unknownClass instanceof SomeClass2) { throw new SomeException(); } return $unknownClass->getSomeClass3(); } catch (SomeException $e) { // TODO: error handling } } /** * @return SomeClass2[] */ public function returnValueTypeByPhpDoc(): array { return [new SomeClass2(), new SomeClass2()]; } } DBMMQVCMJDNFUIPE

Slide 26

Slide 26 text

❆ֻף׆סؠٚتס㕙⺬  class SomeClass extends ParentClass implements SomeInterface { use SomeTrait; private $someClass1; public function __construct() { $this->someClass1 = new SomeClass1(SomeClass1::STATUS_OK); } public function someMethod(SomeClass1 $someClass1): SomeClass3 { try { $unknownClass = $someClass1->someMethod1($this->someClass1->property); if (!$unknownClass instanceof SomeClass2) { throw new SomeException(); } return $unknownClass->getSomeClass3(); } catch (SomeException $e) { // TODO: error handling } } /** * @return SomeClass2[] */ public function returnValueTypeByPhpDoc(): array { return [new SomeClass2(), new SomeClass2()]; } } QVCMJDQSPQFSUZGFUDI

Slide 27

Slide 27 text

❆ֻף׆סؠٚتס㕙⺬  class SomeClass extends ParentClass implements SomeInterface { use SomeTrait; private $someClass1; public function __construct() { $this->someClass1 = new SomeClass1(SomeClass1::STATUS_OK); } public function someMethod(SomeClass1 $someClass1): SomeClass3 { try { $unknownClass = $someClass1->someMethod1($this->someClass1->property); if (!$unknownClass instanceof SomeClass2) { throw new SomeException(); } return $unknownClass->getSomeClass3(); } catch (SomeException $e) { // TODO: error handling } } /** * @return SomeClass2[] */ public function returnValueTypeByPhpDoc(): array { return [new SomeClass2(), new SomeClass2()]; } } QVCMJDDPOTUBOUGFUDI

Slide 28

Slide 28 text

❆ֻף׆סؠٚتס㕙⺬  class SomeClass extends ParentClass implements SomeInterface { use SomeTrait; private $someClass1; public function __construct() { $this->someClass1 = new SomeClass1(SomeClass1::STATUS_OK); } public function someMethod(SomeClass1 $someClass1): SomeClass3 { try { $unknownClass = $someClass1->someMethod1($this->someClass1->property); if (!$unknownClass instanceof SomeClass2) { throw new SomeException(); } return $unknownClass->getSomeClass3(); } catch (SomeException $e) { // TODO: error handling } } /** * @return SomeClass2[] */ public function returnValueTypeByPhpDoc(): array { return [new SomeClass2(), new SomeClass2()]; } } QIQEPD

Slide 29

Slide 29 text

❆ֻף׆סؠٚتס㕙⺬  class SomeClass extends ParentClass implements SomeInterface { use SomeTrait; private $someClass1; public function __construct() { $this->someClass1 = new SomeClass1(SomeClass1::STATUS_OK); } public function someMethod(SomeClass1 $someClass1): SomeClass3 { try { $unknownClass = $someClass1->someMethod1($this->someClass1->property); if (!$unknownClass instanceof SomeClass2) { throw new SomeException(); } return $unknownClass->getSomeClass3(); } catch (SomeException $e) { // TODO: error handling } } /** * @return SomeClass2[] */ public function returnValueTypeByPhpDoc(): array { return [new SomeClass2(), new SomeClass2()]; } } FYUFOET

Slide 30

Slide 30 text

❆ֻף׆סؠٚتס㕙⺬  class SomeClass extends ParentClass implements SomeInterface { use SomeTrait; private $someClass1; public function __construct() { $this->someClass1 = new SomeClass1(SomeClass1::STATUS_OK); } public function someMethod(SomeClass1 $someClass1): SomeClass3 { try { $unknownClass = $someClass1->someMethod1($this->someClass1->property); if (!$unknownClass instanceof SomeClass2) { throw new SomeException(); } return $unknownClass->getSomeClass3(); } catch (SomeException $e) { // TODO: error handling } } /** * @return SomeClass2[] */ public function returnValueTypeByPhpDoc(): array { return [new SomeClass2(), new SomeClass2()]; } } JNQMFNFOUT

Slide 31

Slide 31 text

❆ֻף׆סؠٚتס㕙⺬  class SomeClass extends ParentClass implements SomeInterface { use SomeTrait; private $someClass1; public function __construct() { $this->someClass1 = new SomeClass1(SomeClass1::STATUS_OK); } public function someMethod(SomeClass1 $someClass1): SomeClass3 { try { $unknownClass = $someClass1->someMethod1($this->someClass1->property); if (!$unknownClass instanceof SomeClass2) { throw new SomeException(); } return $unknownClass->getSomeClass3(); } catch (SomeException $e) { // TODO: error handling } } /** * @return SomeClass2[] */ public function returnValueTypeByPhpDoc(): array { return [new SomeClass2(), new SomeClass2()]; } } VTFUSBJU

Slide 32

Slide 32 text

❆ֻף׆סؠٚتס㕙⺬  class SomeClass extends ParentClass implements SomeInterface { use SomeTrait; private $someClass1; public function __construct() { $this->someClass1 = new SomeClass1(SomeClass1::STATUS_OK); } public function someMethod(SomeClass1 $someClass1): SomeClass3 { try { $unknownClass = $someClass1->someMethod1($this->someClass1->property); if (!$unknownClass instanceof SomeClass2) { throw new SomeException(); } return $unknownClass->getSomeClass3(); } catch (SomeException $e) { // TODO: error handling } } /** * @return SomeClass2[] */ public function returnValueTypeByPhpDoc(): array { return [new SomeClass2(), new SomeClass2()]; } } UISPX

Slide 33

Slide 33 text

❆ֻף׆סؠٚتס㕙⺬  class SomeClass extends ParentClass implements SomeInterface { use SomeTrait; private $someClass1; public function __construct() { $this->someClass1 = new SomeClass1(SomeClass1::STATUS_OK); } public function someMethod(SomeClass1 $someClass1): SomeClass3 { try { $unknownClass = $someClass1->someMethod1($this->someClass1->property); if (!$unknownClass instanceof SomeClass2) { throw new SomeException(); } return $unknownClass->getSomeClass3(); } catch (SomeException $e) { // TODO: error handling } } /** * @return SomeClass2[] */ public function returnValueTypeByPhpDoc(): array { return [new SomeClass2(), new SomeClass2()]; } } DBUDI

Slide 34

Slide 34 text

UZQFIJOUJOH OFXPCKFDU QVCMJDQSPQFSUZDPOTUBOU GFUDI SFUVSOWBMVFUZQF DBMMQVCMJDNFUIPE QIQEPD VTFUSBJU DBUDI FYUFOETJNQMFNFOUT UISPX ❣㰆꞊➟ֿ氦榟׌׾ب٤ذشؠت┉鼧 

Slide 35

Slide 35 text

❣㰆꞊➟؅鉮冪׊յ  %FQFOEFS %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFF

Slide 36

Slide 36 text

⪒ؠٚتס❣㰆꞊➟؅꥗״յ  %FQFOEFS %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFS %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFS %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFS %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFS %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFS %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFF %FQFOEFF

Slide 37

Slide 37 text

僗⺸ءٚن׫㚺䬵  " & % $ # ' ( * ) ( , +

Slide 38

Slide 38 text

 僗⺸ءٚن؅➘⮵מ✳ֹ ❣㰆꞊➟סٜ٭ٜزؘشؠ  ءٚن槆⥼ס榟䡗  䐠梪❣㰆ס吾⭳ 

Slide 39

Slide 39 text

ءٚن槆⥼؅榟䡗  杯㏇עQVNMסײ㵚䑴

Slide 40

Slide 40 text

ءٚن槆⥼؅榟䡗  ך־׌ׁ׾㕙⺬ע؛وب٘٤䧗㲊ךױכ ״׾׆כ׵⭳全׾ OBNFTQBDFךױכ״׾ ؙ٤عٛמױכ״׾

Slide 41

Slide 41 text

❣㰆꞊➟סٜ٭ٜزؘشؠ  ز٭ّך婊״ג❣㰆ٜ٭ٜסزؘشؠֿ ך׀׾ &OUFSQSJTF#VTJOFTT3VMFT "QQMJDBUJPO#VTJOFTT3VMFT *OUFSGBDF"EBQUFST 'SBNFXPSLT%SJWFST

Slide 42

Slide 42 text

❣㰆ٜ٭ٜס䧗㲊亠嫎  [ 'controller_layer' => [ 'define' => ['\App\\', '!\App\Providers\\'], ], 'application_layer' => [ 'define' => ['\Acme\Application\\'], 'depender' => ['controller_layer'], ], 'domain_layer' => [ 'define' => ['\Acme\Domain\\'], 'depender' => ['application_layer'] ] ] ];

Slide 43

Slide 43 text

[ 'controller_layer' => [ 'define' => ['\App\\', '!\App\Providers\\'], ], 'application_layer' => [ 'define' => ['\Acme\Application\\'], 'depender' => ['controller_layer'], ], 'domain_layer' => [ 'define' => ['\Acme\Domain\\'], 'depender' => ['application_layer'] ] ] ]; ❣㰆ٜ٭ٜס䧗㲊亠嫎  ٜ٭ٜ⺲

Slide 44

Slide 44 text

[ 'controller_layer' => [ 'define' => ['\App\\', '!\App\Providers\\'], ], 'application_layer' => [ 'define' => ['\Acme\Application\\'], 'depender' => ['controller_layer'], ], 'domain_layer' => [ 'define' => ['\Acme\Domain\\'], 'depender' => ['application_layer'] ] ] ]; ❣㰆ٜ٭ٜס䧗㲊亠嫎  ؤ٤َ٭ؾ٤عס㲊紶 ⺲⯥狜ꝴך䧗㲊

Slide 45

Slide 45 text

[ 'controller_layer' => [ 'define' => ['\App\\', '!\App\Providers\\'], ], 'application_layer' => [ 'define' => ['\Acme\Application\\'], 'depender' => ['controller_layer'], ], 'domain_layer' => [ 'define' => ['\Acme\Domain\\'], 'depender' => ['application_layer'] ] ] ]; ❣㰆ٜ٭ٜס䧗㲊亠嫎  ؤ٤َ٭ؾ٤عס❣㰆ٜ٭ٜס㲊紶 EFQFOEFS❣㰆׈׿י׵荁ַؤ٤َ٭ؾ٤ع EQFFOEFF❣㰆׊י׵荁ַؤ٤َ٭ؾ٤ع

Slide 46

Slide 46 text

ٜ٭ٜ鷿⹚סزؘشؠ  $*ךزؘشؠ⺎耆

Slide 47

Slide 47 text

[ 'controller_layer' => [ 'define' => ['\App\\', '!\App\Providers\\'], ], 'application_layer' => [ 'define' => ['\Acme\Application\\'], 'depender' => ['controller_layer'], ], 'domain_layer' => [ 'define' => ['\Acme\Domain\\'], 'depender' => ['application_layer'] ] ] ]; ❣㰆ٜ٭ٜס䧗㲊亠嫎  ׆סٜ٭ٜنٜؒؕ舅⛮ֿյ אסَٛةعٛמֽׄ׾ 錃銶䧗ꄠס辐伺כ׊י䣽ֻ׾

Slide 48

Slide 48 text

QIQEPDמ׻׾❣㰆ٜ٭ٜס䧗㲊 

Slide 49

Slide 49 text

QIQEPDמ׻׾❣㰆ٜ٭ٜס䧗㲊  $*ךزؘشؠ⺎耆

Slide 50

Slide 50 text

Facadeܯ࡯ͩɺखΛ্͛Ζʂʂ ' => [ 'Sanctuary' => [ 'define' => array_merge($controllerDefine, $applicationDefine, $domainDefine), 'dependee' => ['!Facade'] ], 'Facade' => [ 'define' => [ '\App','\Artisan','\Auth','\Blade','\Broadcast','\Bus','\Cache','\Config', '\Cookie','\Crypt','\DB','\Event','\File','\Gate','\Hash','\Lang','\Log', '\Mail','\Notification','\Password','\Queue','\Redirect','\Request','\Response', '\Route','\Schema','\Session','\Storage','\URL','\Validator','\View' ] ] ] ]; 'BDBEF閛㴔׵ך׀׾ 

Slide 51

Slide 51 text

'BDBEF閛㴔׵ך׀׾ 

Slide 52

Slide 52 text

䐠梪❣㰆ס吾⭳  ˘ؤ٤َ٭ؾ٤عס❣㰆ءٚنמ䐠梪❣㰆ֵֿזיעם׼םַ˙ $MFBO"SDIJUFDUVSF 瑬珕ؤ٤َ٭ؾ٤عס磵⺬ "DZDMJD%FQFOEFODJFT1SJODJQMF ꪜ䐠梪❣㰆꞊➟ס⸉⯞

Slide 53

Slide 53 text

⮆־׽ט׼ַ䐠梪❣㰆  " & % $ # ' ( * ) ( , +

Slide 54

Slide 54 text

䐠梪❣㰆ס吾⭳ 

Slide 55

Slide 55 text

IUUQTQBDLBHJTUPSHQBDLBHFTOB[POPIJUPEFQFOEFODZBOBMZ[FS 佭ꪜ✳זיׂד׈ַ

Slide 56

Slide 56 text

5BLFBHPPE TPGUXBSFEFTJHOMJGF 

Slide 57

Slide 57 text

ׇ岲绱 ֵ׽ֿכׇֹ׉ַױ׊ג 

Slide 58

Slide 58 text

8F˖SF)JSJOH 