⊗ppOpIfII 74 of 107 menu

PHPにおけるOOPのクラス継承とインターフェース実装

クラスは別のクラスを継承し、 同時に何らかのインターフェースを実装することができます。 実際の例で見てみましょう。

Programmerというクラスを作りたいとします。 このクラスには名前、給料、そしてプログラマが知っている 言語のリストを持たせます。 現時点でのクラスの説明は非常に曖昧です: はい、クラスには名前、給料、言語があります - しかし、このクラスにはどんなメソッドがあるでしょうか?

インターフェース iProgrammer を使って クラスをより正確に定義してみましょう:

<?php interface iProgrammer { public function __construct($name, $salary); public function getName(); public function getSalary(); public function getLangs(); public function addLang($lang); } ?>

すでに実装されているクラスを調べてみると、 似たようなクラス Employee がすでにあることが分かりました。 このクラスは Programmer クラスのすべてのメソッドを 実装しているわけではありませんが、一部は実装しています。 以下がすでに存在するクラスのコードです:

<?php class Employee { private $name; private $salary; public function __construct($name, $salary) { $this->name = $name; $this->salary = $salary; } public function getName() { return $this->name; } public function getSalary() { return $this->salary; } } ?>

この場合、新しいクラス Programmer が 必要なメソッドの一部を Employee クラスから 継承するようにするのが理にかなっています (残りの部分は新しいクラス自体で後で実装します):

<?php class Programmer extends Employee { } ?>

また、クラス Pogrammer は インターフェース iProgrammer を 実装する必要があることが分かっています:

<?php class Programmer implements iProgrammer { } ?>

クラス Employee からの継承と インターフェース iProgrammer の実装を 組み合わせてみましょう:

<?php class Programmer extends Employee implements iProgrammer { } ?>

結果として、私たちのクラス Pogrammer は クラス Employee からメソッド __constructgetNamegetSalary を継承し、 メソッド addLanggetLangs は 自分たちで実装する必要があります:

<?php class Programmer extends Employee implements iProgrammer { public function addLang($lang) { // 実装 } public function getLangs() { // 実装 } } ?>

インターフェース iProgrammer は、 メソッドがそのクラス固有のものか継承されたものかは気にしません - 重要なのは、記述されたすべてのメソッドが実装されていることです。

私の Employee クラスと インターフェース iProgrammer のコードをコピーしてください。 私の Programmer クラスの草案はコピーしないでください - 私のコードを見ずに、このクラスを自分で実装してください。

日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否