簡単な経験則:クラスが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人の間で交渉します。