Slide 1

Slide 1 text

Copyright© M&A Predefined Interfaces PHPerKaigi 202 2 LT

Slide 2

Slide 2 text

Copyright© M&A 2

Slide 3

Slide 3 text

Copyright© M&A 3 M&A CTO M&A 6 🙏

Slide 4

Slide 4 text

Copyright© M&A 4 Web Laravel 3/28 Laravel Queue

Slide 5

Slide 5 text

Copyright© M&A 5

Slide 6

Slide 6 text

Copyright© M&A 6 Predefined Interfaces Interface Interface class interface interface A { public function a(); }

Slide 7

Slide 7 text

Copyright© M&A 7 Predefined Interfaces Interface Interface Iterable Cacheable Renderable interface Speakable { // Ͳ͏஻ΕΔ͔͸෼͔Βͳ͍͕஻ΕΔ public function speak(); }

Slide 8

Slide 8 text

Copyright© M&A 8 Predefined Interfaces Interface interface Speakable { // Ͳ͏஻ΕΔ͔͸෼͔Βͳ͍͕஻ΕΔ public function speak(); } class Japanese implements Speakable { public function speak() { echo "͜Μʹͪ͸"; } } class American implements Speakable { public function speak() { echo "Hello"; } } Interface

Slide 9

Slide 9 text

Copyright© M&A 9 Predefined Interfaces Predefined Interfaces PHP PHP PHP

Slide 10

Slide 10 text

Copyright© M&A 10 Predefined Interfaces Predefined Interfaces Traversable Interface foreach Throwable Throwable throw Error Exception Stringable Interface print echo

Slide 11

Slide 11 text

Copyright© M&A 11 Predefined Interfaces PHP Traversable Iterator IterotorAggregate Throwable ArrayAccess Countable Stringable

Slide 12

Slide 12 text

Copyright© M&A 12 Predefined Interfaces Predefined Interface Stringable(PHP 8 ) (__toString() ) class Book implements Stringable { public function __construct(private string $name, private int $price, private bool $isNew = false) {} public function __toString() { return $this->name . " : " . $this->price . "ԁ" . ($this->isNew ? " ৽ൃച" : ""); } } echo new Book(name: 'ϓϩϑΣογϣφϧWebϓϩάϥϛϯά Laravelʪ࠷৽Laravel 9ରԠʫ', price: 3520, isNew: true); ~/Project/predefined-interface ▶ php iterator.php ϓϩϑΣογϣφϧWebϓϩάϥϛϯά Laravelʪ࠷৽Laravel 9ରԠʫ : 3520ԁ ৽ൃച

Slide 13

Slide 13 text

Copyright© M&A 13 Predefined Interfaces Predefined Interface Iterator Traversal foreach Iterator Traversal class BookShelf implements Iterator { private int $position = 0; public function __construct(private array $books) {} public function current() { return $this->books[$this->position]; } public function next() { ++$this->position; } public function key() { return $this->position; } public function valid() { return isset($this->books[$this->position]); } public function rewind() { $this->position = 0; } }

Slide 14

Slide 14 text

Copyright© M&A 14 Predefined Interfaces Predefined Interface Iterator Traversal foreach $books = [ new Book(name: 'PHPϑϨʔϜϫʔΫ Laravel WebΞϓϦέʔγϣϯ։ൃ όʔδϣϯ5.5 LTSରԠ', price: 4180), new Book(name: 'ΈΜͳͷPHPɹݱ৔Ͱ໾ཱͭ࠷৽ϊ΢ϋ΢ʂ', price: 2398) ]; $boolShelf = new BookShelf($books); foreach ($boolShelf as $book) { print($book); print("\n"); } ~/Project/predefined-interface ▶ php iterator.php PHPϑϨʔϜϫʔΫ Laravel WebΞϓϦέʔγϣϯ։ൃ όʔδϣϯ5.5 LTSରԠ : 4180ԁ ΈΜͳͷPHPɹݱ৔Ͱ໾ཱͭ࠷৽ϊ΢ϋ΢ʂ : 2398ԁ

Slide 15

Slide 15 text

Copyright© M&A 15 Predefined Interfaces Predefined Interface class BookShelf implements Iterator { … ུ … public function addNewArrival(string $name, int $price) { $this->books[] = new Book($name, $price, isNew: true); } } $books = [ new Book(name: 'PHPϑϨʔϜϫʔΫ Laravel WebΞϓϦέʔγϣϯ։ൃ όʔδϣϯ5.5 LTSରԠ', price: 4180), new Book(name: 'ΈΜͳͷPHPɹݱ৔Ͱ໾ཱͭ࠷৽ϊ΢ϋ΢ʂ', price: 2398) ]; $boolShelf = new BookShelf($books); $boolShelf->addNewArrival(name: 'ϓϩϑΣογϣφϧWebϓϩάϥϛϯά Laravelʪ࠷৽Laravel 9ରԠʫ', price: 3520); foreach ($boolShelf as $book) { print($book); print("\n"); }

Slide 16

Slide 16 text

Copyright© M&A 16 Predefined Interfaces Predefined Interface ~/Project/predefined-interface ▶ php iterator.php PHPϑϨʔϜϫʔΫ Laravel WebΞϓϦέʔγϣϯ։ൃ όʔδϣϯ5.5 LTSରԠ : 4180ԁ ΈΜͳͷPHPɹݱ৔Ͱ໾ཱͭ࠷৽ϊ΢ϋ΢ʂ : 2398ԁ ϓϩϑΣογϣφϧWebϓϩάϥϛϯά Laravelʪ࠷৽Laravel 9ରԠʫ : 3520ԁ ৽ൃച

Slide 17

Slide 17 text

Copyright© M&A 17 Predefined Interfaces Predefined Interface echo print throw foreach string string string->toJapanese();