第10章 オブジェクト指向構文 / 第5回 模擬試験
次のコードの実行結果として正しいものはどれか。 ```php class Counter { private int $count = 0; public function increment(): static { $this->count++; return $this; } public function getCount(): int { return $this->count; } } $c = new Counter(); print $c->increment()->increment()->increment()->getCount(); ```
3
正解
1
0
エラーが発生する
解説
`increment()`メソッドが、処理の最後に`return $this;`で「自分自身のインスタンス」を返しているため、`$c->increment()->increment()->increment()`のようにメソッド呼び出しを`->`で連続してつなげる「メソッドチェーン」が可能になっています。
`increment()`が呼ばれるたびに`private int $count`が1ずつ加算されるため、3回連続で呼び出すと`$count`は`0→1→2→3`と変化し、最後に`getCount()`で`3`が返されます。
例:
```
class Counter {
private int $count = 0;
public function increment(): static {
$this->count++;
return $this; // 自分自身を返すことでメソッドチェーンが可能に
}
public function getCount(): int {
return $this->count;
}
}
$c = new Counter();
print $c->increment()->increment()->increment()->getCount(); // 3
```
戻り値の型`: static`は「呼び出されたクラス自身の型を返す」ことを表す型宣言(PHP8.0で導入)で、メソッドチェーンを構築する際によく使われます。
(参照: 独習PHP 第4版 第10章 オブジェクト指向構文 10.1.3節 メソッド p.478〜481)