2

User2 つの子クラスUser_InstagramUser_Email. これらのクラスを使用して、複数のログイン方法をサポートしています。ユーザーは、Instagram、電子メール、またはその両方を使用してログインすることを選択できます (一度電子メールを使用し、後で Instagram を使用します)。

このUser_Instagramクラスには、Instagram 固有のユーザー パラメーター (InstagramUserId、Bio など) が含まれています。このUser_Emailクラスは、電子メールとパスワードの組み合わせを使用した一般的なサインアップに使用されます。

これを OOP 準拠の方法で実装する方法を見つけようとしています。次のことができる必要があります。

  1. User_Instagram->register($token)電話または電話でユーザーを登録します。User_Email->register($email,$password)
  2. User一般的なユーザー情報 ( など$userid) にアクセスできるようにするため、およびユーザーがログインしているサービス (電子メール、Instagram、またはその両方) を知るために、クラスをインスタンス化します。

私が現在実装している方法は維持するのが少し難しいです - そして私はかなり間違っていると確信しています (それを直感と呼んでください)。

現在のクラス構造

親クラス

class User {
    protected $userid = NULL;
    protected $loggedInServices = array('instagram'=>0,'email'=>1);
    ...
}

そして子クラス:

class User_Instagram extends User {
    private $instagram_userid;
    private $bio;
    private $profile_pic;
    private $token;
    ...

    public function signIn( $token ) { ... }
    public function register( $token ) { ... }
}

class User_Email extends User {
    private $email;
    private $password; # hashed, of course ;)

    public function signIn( $email, $password) { ... }
    public function register( $email, $password, $passport_number) { ... }
}

私は当初、Factory クラスがここで機能する可能性があると考えていましたが、そのシナリオでは親クラスをインスタンス化できません。何か案は?

4

1 に答える 1

2

ログイン プロセスを実装するためにユーザー クラスから継承する必要があるのはなぜですか。私はそれを次のように変更します:

class User {
    protected $userid = NULL;
    public function setUserId($id) { ... }
    ...
}

class Login_Instagram {
    private $instagram_userid;
    private $bio;
    private $profile_pic;
    private $token;
    ...

    public function __construct(User $user) { ... }
    public function signIn( $token ) { ... $user->setUserId($id); ... }
    public function register( $token ) { ... }
}

class Login_Email {
    private $email;

    public function __construct(User $user) { ... }
    public function signIn( $email, $password) { ... $user->setUserId($id); ... }
    public function register( $email, $password, $passport_number) { ... }
}

コンストラクターを 2 回実装しないようにするには、その親クラスを作成し、その親クラスの setUserId に対しても作成します。ただし、特にプロセスが異なる可能性がある場合は、ログイン手順をユーザー クラスに含める必要はありません。

オブジェクトにパスワード ハッシュを保存する理由は何ですか? ユーザーを検証したら、ユーザーIDを設定するだけで、後でそのパスワードハッシュは必要ありません。

于 2013-04-06T11:37:43.533 に答える