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

公共和私有 当您编写一个类时,您希望某些方法可以被调用(object.method),而另一些则不会在类外调用。例如,在您的密码检查类中,如果该方法在将密码发送到数据库之前使用另一种方法对该密码进行加密,那么有一个方法来传递用户名和密码并检查密码是有意义的。检查加密密码是否与数据库中的密码匹配,将此密码加密方法设为公开是没有意义的,因为只有类将使用此方法,而无需其他任何东西。

于 2013-09-19T02:06:14.303 回答
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 回答