0

私は OOP の世界に不慣れで、それについてできる限り読んでいて、これほど混乱したことはありません。コードを整理したり、保守性を高めたりするのに最適であることは理解しています.OOPコードをいくつか書いたことがありますが、それが適切かどうかはわかりませんが、正常に動作します.

public private関数とextendsおよびについて混乱していますconstructors。私は自分のコードでそれらをまだ使用しておらず、実際の例でそれらを使用する場所がわかりません。読んで理解しようとすればするほど、ますます混乱していきます。私は自分のコードを含めましたが、誰かが間違い、改善、適切な使用法、組織を指摘できるかどうか疑問に思っていました. 多くの経験を持つ誰かが私のコードを見て、私に指針を与えてくれれば、理解を深めるのに役立つと思います.

class userFunctions{

    const SALT_LENGTH = 9;

    //Retrieves encrypted password from database returns in variable $salt
    public function retrievePassword($conn,$username) {
    try{
       $stmt = $conn->prepare('SELECT `password` FROM `users` WHERE `userName`= :userName');
       $stmt->bindValue(':userName', $username);
       $stmt->execute();
       $salt = $stmt->fetchColumn();

    } catch (PDOException $e){
        echo 'Connection failed: ' . $e->getMessage();
    }
        return $salt;
}
    //End of retrieve password method




////////////////////////////////////////////////////////////////



    //Generate an encrypted password method
    public function generateHash($password, $salt = null)

{
    if ($salt === null) {
        $salt = substr(md5(uniqid(rand(), true)), 0, self::SALT_LENGTH);
    } else {
        $salt = substr($salt, 0, SALT_LENGTH);
    }
        return $salt . sha1($salt . $password);
}
    //End of generate encrypted password method




////////////////////////////////////////////////////////////////



    //Check database for duplicate username
    public function userCheck($conn,$userName){
    try{
        $stmt = $conn->prepare('SELECT COUNT(*) FROM `users` WHERE `userName` LIKE CONCAT("%",:userName)');
        $stmt->bindValue(':userName', $userName);
        $stmt->execute();
        $count = $stmt->fetchColumn();
        return $count;
    } catch (PDOException $e){
            echo 'Connection failed: ' . $e->getMessage();

    }

    }
    //End of Check databade for duplicate username



////////////////////////////////////////////////////////////////




    //Add user to database
    public function Register($conn,$userName,$encryptedPass){

    try{      
    $stmt = $conn->prepare('INSERT INTO users (userName, password) VALUES (:userName, :password)');
    $stmt->execute(array(':userName' => strip_tags($userName), ':password' => $encryptedPass));
    }  catch (PDOException $e){
        echo 'Connection failed: ' . $e->getMessage();
    }

}
        //End of add user to database



////////////////////////////////////////////////////////////////
4

2 に答える 2

1

関数または変数が である場合public、クラス外でアクセスできます。である場合protected、そのクラスおよび拡張クラスで使用できます。の場合private、そのクラスでのみ使用できます。

クラスの__construct()機能は、 を使用したときに発生するものですnew Class()。その関数を使用して変数をクラスに渡すこともできます。

class Class{
    public $var;
    public function __construct($passedin){
        $this->var = $passedin;
    }
}

これにより、次のことが可能になります。

$class = new Class('This is the passed in variable, that will be stored in $var');

ストアなどのメイン クラスがある場合は、クラスを拡張して、製品タイプ用の別のクラスを含めることができます。

class Food extends Product{
    //Stuff that food would have that clothes wouldn't have
}

phpacademy が作成した、OOP のチュートリアルであり、多くのことを説明しているこれらのビデオもここで見ることができます。私は OOP を自分でやったことがありませんが、チュートリアルを見て、これらすべてを学びました。

于 2013-09-19T02:04:38.780 に答える
1

パブリックとプライベート クラスを作成する場合、呼び出し可能にしたい特定のメソッド (object.method) と、クラス外で呼び出されたくないメソッドがあります。たとえば、パスワード チェック クラスでは、ユーザー名とパスワードが渡され、そのメソッドが別のメソッドを使用してこのパスワードを暗号化してからデータベースに送信する場合、そのメソッドがパスワードをチェックするようなメソッドを持つことは理にかなっています。暗号化されたパスワードがデータベースのパスワードと一致することを確認してください。このパスワード暗号化メソッドをパブリックとして使用しても意味がありません。このメソッドを使用するのはクラスだけであり、他には何もする必要がないためです。

于 2013-09-19T02:06:14.303 に答える