OOP类,如何在课堂上放课

时间:2012-12-27 18:22:03

标签: php class object

我已经开始学习OOP,并且我已经建立了一个名为accountactions的课程,我想知道我是否写得很好。

该类位于文件中:accountactions.class.php。

<?php

class accountactions(){

    public function register($login, $password, $email){

        //Zapisujemy dane wysłane formularzem
        $this->username = mysql_real_escape_string($login);
        $this->password = mysql_real_escape_string($password);
        $this->email = mysql_real_escape_string($email);

        //Hash password
        $this->password = md5(sha1($this->password));

        $db->simplequery("INSERT INTO radio_users(id, username, password, email) VALUES('', '$this->username', '$this->password', '$this->email')");

    }


}

?>

register.php文件:

<?php

    require_once("accountactions.class.php");

    $account = new accountactions();

    $account->register('samplelogin', 'samplepassword', 'sample@email');

?>

我对这个片段有一些问题:

$db->simplequery("INSERT INTO radio_users(id, username, password, email) VALUES('', '$this->username', '$this->password', '$this->email')");

如何将我的db类加入我的帐户类?

我希望保留一个模型,我可以做以下事情:

$ account-&gt;注册(&#39; $ _发布[&#39;登录&#39;]&#39;,&#39; $ _发布[&#39;密码&#39;]&#39 ;,&#39; $ _ POST [&#39; email&#39;]&#39;);

除非有更好的方法来做到这一点。

我是OOP的新手,所以任何提示和指南都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

这段代码主要是好的,但有一些我认为不好的东西。首先,我认为你应该遵循一些命名约定,因为accountactions是一个坏的clas名称。对于OOP,我认为你应该使用一些camelcase变体(所以要么是accountActions或AccountActions - 我建议你使用后者)。然后,类名后面不应该有括号。我还建议你将每个花括号放在单独的行中,但这取决于你的个人喜好。然后,你的第一个评论很精彩 - 我建议你总是用英语写所有评论,变量名等,只因为每个人都会理解它。然后在寄存器方法中,您将变量分配给类'属性,但您之前没有声明它们(或者至少您没有在代码中向我们显示它们)。同样在插入查询中,您尝试将emtpy字符串''插入到id字段中(我假设它是唯一的,带有auto_increment的非null无符号整数 - 如果是,则不应将其包含在您的查询中)。我会这样写你的代码:

class AccountActions
{
    protected $Username;
    protected $Password;
    protected $Email;
    protected $DB;

    public function __construct()
    {
        $this->DB = //instantiate your database driver of choice here, e.g. mysqli
    }

    public function register($Username, $Password, $Email)
    {
        //We escape the provided values and populate the object's properties with them
        $this->Username = mysql_real_escape_string($Login);
        $this->Password = mysql_real_escape_string($Password);
        $this->Email = mysql_real_escape_string($Email);
        //Hash password
        $this->Password = md5(sha1($this->Password));
        $Query = "INSERT INTO radio_users(username, password, email) 
                  VALUES('$this->Username', '$this->Password', '$this->Email')";
        $this->DB->simplequery($Query);    
    }
}
  

如何将我的db类加入我的帐户类?

不确定这里的意思,但是如果你想要访问类中的某个数据库驱动程序,你应该添加一个属性来存储数据库驱动程序并在构造函数中实例化它(或者你可能有一个静态属性)这将保存数据库驱动程序。)

也不确定你在标题问题中的意思 - 如果你想使用内部类(在另一个类中声明的类) - 它们在PHP中不可用。

我还鼓励您在学习基本OOP后选择一些PHP框架 - Zend Framework是我的最爱。