簡単な経験則:クラスがextends
の場合 別の場合、そのクラスは その親クラス(わずかに変更または拡張されただけ)。親クラスの代わりにこの子クラスを渡すことができます。例:
class Foo { }
class Bar extends Foo { }
function baz(Foo $foo) { }
baz(new Bar);
これは機能します、baz()
Foo
が必要です Bar
も受け入れます 、Bar
は Foo
。
さて、は あなたのUsers
Database
?いいえ。ユーザーはデータベースではありません。ユーザーは使用します データベース。ある場合は、構成を使用する必要があります :
class User {
protected $database;
public function __construct(Database $database) {
$this->database = $database;
}
}
クラスは その責任は何ですか 。ユーザー管理クラスの責任は、ユーザーデータを管理することです。その一部にはデータベースとの通信が含まれる場合がありますが、それはユーザー管理クラスがであるという意味ではありません。 データベース。 User extends Database
、つまり、Database
のすべてを実行できるということです。 クラスでできること(およびそれ以上)。つまり、User
を使用できるということです どこでもクラスではなく Database
クラス、そしてそれは意味がありません。責任を分離してください。
さて、それが正しい構造であるかどうかはまだ議論の余地がありますが、それは正しい方向に進んでいます。しかし、あなたは本当にUser
が欲しいかもしれません クラス。1人のユーザーを表します 。次に、UserManager
があります またはUserORM
またはUserStorage
または、User
の取得と保存に関係するもの データベース内のオブジェクト。このクラスは順番に使用します Database
まさにそれをするために。これにより、責任が明確になり、分離されます。 Users
クラスはユーザーデータ、Database
を表します クラスはデータベース、UserORM/Manager/whatever
と対話します 真ん中で2人の間で交渉します。