0

クラスを適切に使用する方法を学んでいます... usercake を見ていますが、そのほとんどは理にかなっていますが、__construct 関数が何をしているのかわかりません。クラスを作成するときに呼び出されることを理解しています...つまり、 $loggedInUser = new loggedInUser();

以下は何をするもので、なぜそれが必要なのですか?

    function __construct($user, $display, $title, $pass, $email)
{
    //Used for display only
    $this->displayname = $display;

    //Sanitize
    $this->clean_email = sanitize($email);
    $this->clean_password = trim($pass);
    $this->username = sanitize($user);
    $this->title = sanitize($title);

    if(usernameExists($this->username))
    {
        $this->username_taken = true;
    }
    else if(displayNameExists($this->displayname))
    {
        $this->displayname_taken = true;
    }
    else if(emailExists($this->clean_email))
    {
        $this->email_taken = true;
    }
    else
    {
        //No problems have been found.
        $this->status = true;
    }
}

編集:クラスが呼び出される方法は次のとおりです。

                    $loggedInUser = new loggedInUser();
                $loggedInUser->email = $userdetails["email"];
                $loggedInUser->user_id = $userdetails["id"];
                $loggedInUser->hash_pw = $userdetails["password"];
                $loggedInUser->title = $userdetails["title"];
                $loggedInUser->displayname = $userdetails["display_name"];
                $loggedInUser->username = $userdetails["user_name"];
                $loggedInUser->alerts = array();
4

3 に答える 3

2

コンストラクタ関数です。そのクラスのインスタンスを作成すると、コンストラクター関数が実行されます。

たとえば、コンストラクターを使用します(クラス名はわかりません)。

$class = new MyClass("jdoe", "John Doe", "Standard User", "Passw0rd!","jdoe@example.com");`

これにより、新しい が作成MyClassされ、 に保存され$classます。

その目的に関しては、オブジェクトをある種の開始状態に初期化できます。プロパティを設定したり、デフォルト値を設定したり、何もしないことができます。それは本当にアプリケーション固有です。

EDIT(OPの編集に応じて)

オブジェクトのプロパティを保護または非公開にし、セッター/ゲッターを使用してそのデータにアクセスすることをお勧めします。オブジェクトのプロパティへのパブリック アクセスを許可していますが、これは悪いことではありませんが、変更するつもりのないものを誤って変更してしまう可能性があります。たぶん、次のようなことを検討する必要があります。

<?php

class LoggedInUser
{

    private $id;
    private $username;
    private $password;
    private $displayname;
    private $email;
    private $title;

    public function __construct($id, $username, $password, $displayname, $email, $title)
    {
        $this->setID($id);
        $this->setUsername($username);
        $this->setPassword($password);
        $this->setDisplayName($displayname);
        $this->setEmail($email);
        $this->title($title);
    }

    public function sanitize($var)
    {
        //Sanitize $var and then...
        return $var;
    }

    public function setID($num)
    {
        $this->id = $this->sanitize($num);
    }

    public function setUsername($string)
    {
        $this->username = $this->sanitize($string);
    }

    //Keep adding other "set" methods.
}

?>

次に、これを使用するには、次のようにします。

$loggedin = new LoggedInUser( "arg1", "arg2", "etc..." );

これで、オブジェクトが開始状態でセットアップされました。後でプロパティを変更する必要がある場合は、いつでも次のことができます。

$loggedin->setTitle("Correct Title");

プロパティを返す関数も必ず作成してください。上記の例では、プロパティはプライベートであるため、 を呼び出すと$loggedin->titlePHP でエラーが発生します。

于 2014-04-02T14:50:31.397 に答える
1
// Set construct function which will run when your class is called 
function __construct($user, $display, $title, $pass, $email)
{
    // Sets display name
    $this->displayname = $display;

    // Sanitizing user inputted data (See SQL injection/XSS attacks)
    $this->clean_email = sanitize($email);
    $this->clean_password = trim($pass);
    $this->username = sanitize($user);
    $this->title = sanitize($title);

    // Check if any duplicates of the user inputted data exist already in the database
    // If any of these checks return true, the status wont be set to true, and further code wont be ran
    if(usernameExists($this->username))
    {
    $this->username_taken = true;
    }
    else if(displayNameExists($this->displayname))
    {
    $this->displayname_taken = true;
    }
    else if(emailExists($this->clean_email))
    {
    $this->email_taken = true;
    }
    else
    {
    // No duplicate information has been found, set status and continue registration
    $this->status = true;
    }
}
于 2014-04-02T14:54:00.563 に答える