PHP 学習 part. 8
クラスとオブジェクト
オブジェクト指向に関連する内容について学びます。
final
final キーワードをつけてメソッドを宣言するとその派生クラスではそのメソッドのオーバーライドはできません。
<?php class Book { public $type = "Book"; public final function getType() { return $this->type; } } class Manga extends Book { // オーバーライドできない public function getType() { } }
抽象クラス
abstract キーワードを使って抽象クラスを定義します。
<?php abstract class Book { abstract public function getPrice(); } class MyBook extends Book { public $price = 1000; public function __construct() { } public function getPrice() { return $this->price; } } $book = new MyBook(); echo $book->getPrice();
インターフェース
interface キーワードを使ってインターフェースを定義します。
<?php interface Hand { public function punch($value); } interface Foot { public function kick($value); } class AttackMethod implements Hand, Foot { public function punch($x) { echo $x * 10 . "のダメージ", PHP_EOL; } public function kick($x) { echo $x * 30 . "のダメージ", PHP_EOL; } } $am = new AttackMethod(); $am->punch(5); // 50のダメージ $am->kick(5); // 150のダメージ
abstract と interface の違いはなんとなく理解はしていますが、使ったことはないですね。
複数のインターフェースを実装するときに同名のメソッドを持たないように注意が必要です。
遅延静的束縛
https://www.php.net/manual/ja/language.oop5.late-static-bindings.php
<?php class SuperClass { public function helloGateway() { // self::hello() だと SuperClass が呼ばれる static::hello(); } public static function hello() { echo __CLASS__, ' hello', PHP_EOL; } } class Foo extends SuperClass { public static function hello() { echo __CLASS__, ' hello', PHP_EOL; } } $foo = new Foo(); $foo->helloGateway();
本
- 作者: 小川雄大,柄沢聡太郎,橋口誠
- 出版社/メーカー: 技術評論社
- 発売日: 2014/10/31
- メディア: Kindle版
- この商品を含むブログを見る