diff --git a/src/pages/tips/object-oriented.mdx b/src/pages/tips/object-oriented.mdx index 30de5a0..2662312 100644 --- a/src/pages/tips/object-oriented.mdx +++ b/src/pages/tips/object-oriented.mdx @@ -343,8 +343,7 @@ class User { public $name; - public function __constructor($name) - { + public function __constructor($name) { echo "newされました"; $this->name = $name; } @@ -388,11 +387,80 @@ +### 派生を作る (継承) + +クラスには、**継承 (inheritance)** という機能があります。 +これはあるクラスをもとにして、さらに新しいクラスを作ることができる機能です。 + +継承をすることにより、もとのクラスの一部分だけを変更したり、もとのクラスの機能を拡張したりすることができます。 + +```php +name = $name; + } + + public function greet(User $target) { + echo "こんにちは、{$target->name}さん!"; + } +} + +$owner = new User("オーナー"); + +$user1 = new User("Bob"); +$user1->greet($owner); +// => こんにちは、オーナーさん! + + +class CheerfulUser extends User { + public function greet(User $target) { + echo "やあ、{$target->name}さん!"; + } +} + +$user2 = new CheerfulUser("Charlie"); +$user2->greet($owner); +// => やあ、オーナーさん! + + +class PoliteUser extends User { + public function greet(User $target) { + super::greet($target); // Userクラスのgreetメソッドを呼び出す + echo "今日もいい天気ですね!"; + } +} + +$user3 = new PoliteUser("Dave"); +$user3->greet($owner); +// => こんにちは、オーナーさん!今日もいい天気ですね! + + +class RudeUser extends User { + public function greet(User $target) { + echo "おい、{$target->name}!"; + } + + public function shout(User $target) { + echo "うるせぇ、{$target->name}!"; + } +} + +$user4 = new RudeUser("Eve"); +$user4->greet($owner); +// => おい、オーナー! +$user4->shout($owner); +// => うるせぇ、オーナー! +``` + ### 敢えてアクセス制限をかける (アクセス修飾子) -### データに依存しない振る舞いを定義する (static) +ここまで読み進めてきた人に取っては、ソースコードに含まれる `public` というキーワードが気になっているかもしれません。 -### 派生を作る (継承) +### データに依存しない振る舞いを定義する (static) ## よく見るコード例