正确使用OOP PHP

时间:2013-09-19 01:56:05

标签: php oop

我是OOP世界的新手,我一直在尽可能多地阅读它并且从未如此困惑。我知道它非常适合组织代码并使其更易于维护等。我已经编写了一些OOP代码,但我不确定它是否正确,但它工作正常。

我对public private个函数以及extendsconstructors感到困惑。我还没有在我的代码中使用它们,也没有看到我在现实生活中使用它们的例子。我读的越多,试图理解它就越困惑。我已经包含了我的代码,并想知道是否有人可以指出错误,改进,正确使用,组织。我觉得如果有经验的人能够查看我的代码并给我指点,这将有助于我更好地理解。

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



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

2 个答案:

答案 0 :(得分: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制作的这些视频here,它们是OOP的教程并解释了很多内容。我自己从来没有做过OOP,但是我看过教程,这就是我学到所有这些东西的地方。

答案 1 :(得分:1)

公共和私人     在编写类时,有一些方法可供您调用(object.method),而其他方法则不会在类外调用。例如,在您的密码检查类中,有一个方法可以传入用户名和密码,并且该方法检查了密码,如果该方法使用另一种方法加密此密码,然后再将其发送到数据库检查加密的密码是否与数据库上的密码匹配,将此密码加密方法公之于众是没有意义的,因为只有该类才会使用此方法,而其他任何方法都不需要。