3

これは、私が完全に確信したことも、確固たる答えを見つけたこともありません。

内部に register() メソッドを持つ User クラスがあり、このメソッドを実装するのに最適な方法がわからないとしましょう。

私のregister.phpページには

$user->register($_POST['firstName'], $_POST['lastName'], $_POST['username'], etc..);

次に、 register() メソッドで、オブジェクトの属性をわざわざ設定せずに、メソッドのシグネチャで提供された変数を使用するか、そうする必要があります

$user->register();

そして、登録機能で次のようなことをします

$this->firstName = $_POST['firstName'];
$this->lastName = $_POST['lastName'];
etc...

前もって感謝します。

4

3 に答える 3

3

registerメソッドがオブジェクト(クラスではなくインスタンス)に関連付けられている場合は、事前に設定する必要のある内部プロパティを使用する必要があります。したがって、ユーザーをインスタンス化し、プロパティを設定してから、$ user-> register()を呼び出します。

$user = new User();
$user->firstName = 'name'; //$user->setFirstName('name') could also work
$user->lastName = 'last name'; // for this to work, the properties have to be public
$user->register();

ユーザーAは自分自身を登録することしかできず、他には何も登録できないはずです。

パラメータ付きのメソッドを使用する場合、基本的には(ユーザーだけでなく)何でも登録できます。

また、登録がパラメータをデータベースに書き込むことを意味する場合、ユーザーオブジェクトの内部のみを使用するメソッドはより堅牢です。登録メカニズムを変更する場合(ユーザーオブジェクトから他の情報が必要な場合)、変更する必要があるのはユーザークラスのみです。

編集:

もう少し考えたので、ユーザーを登録するための別のクラスを作成すると思います。これは、ユーザーオブジェクト全体を取得し、ロールなどを追加してデータベースに保存します。そうすれば、ユーザーオブジェクトは少し単純になり、登録または登録解除の方法を知る必要がなくなり、登録メカニズムが変更されても、ユーザーは同じままでいられます。

編集2:

実際にはセッターではないメソッドからオブジェクトプロパティを設定する場合は注意してください(register($ fname、$ lname、...)の場合のように)。同じアプローチにより、明らかな理由もなく「何か」によってオブジェクトが変更され、コード内のどこにもセッターやプロパティへの直接呼び出しが見つからなかった場合に、頭痛の種が生じました。

于 2012-07-12T18:00:11.253 に答える
1

実装は完全にあなた次第です。どちらの方法でも実行できます。次に例を示します。

class User{

    protected $_firstName = null;

    protected $_lastName = null;


    public function register( array $params = array() ){
        if(!empty($params) ){
           $this->setParams($params);
        }
        // Do more processing here...
    }


    public function setParams($params){
       // Set each of the users attributes.
    }


    public function setFirstName($name = null){
       if($name !== null){
          $this->_firstName = $name;
          return true;
       }
       return false;
    }


    public function getFirstName(){
       return $this->_firstName;
    }


    // Same getter and setter methods for other attributes...

}

このようにして、ユーザー属性の配列を に渡すか、 、 など$_POSTを呼び出して個別に行うことができます...$user->setFirstName()$user->setLastName()

于 2012-07-12T18:06:27.673 に答える
0

グローバルスコープで定義されていることを考慮$_POSTすると、後者のアプローチを使用する方が理にかなっています(引数を渡して関数から設定するのではありません)。ただし、これは$_POSTグローバル スコープで宣言されている場合 (この場合) にのみ機能し、外部 PHP モジュールからクラスを渡す場合にシナリオの柔軟性が失われることに注意してください。

于 2012-07-12T17:57:53.217 に答える