如何在PHP中实现注册类(使用OOPS概念)?

如何在PHP中实现注册类(使用OOPS概念)?,php,class,registration,oop,Php,Class,Registration,Oop,我正在用PHP创建一个注册页面,所以我创建了一个classclass.register.PHP 因为我在PHP中实现了第一次完整的类基方法,并且还使用了PDO。请建议我如何以优化的方式制作有价值的课程。下面是我的课堂: class.register.php 班级注册 { 私有$_confirm=0; public$post_data=array(); 私人$db; 受保护的$db_name='db_movies'; 受保护的$db_用户='root'; 受保护的$db_pass='keshav'

我正在用PHP创建一个注册页面,所以我创建了一个class
class.register.PHP

因为我在PHP中实现了第一次完整的类基方法,并且还使用了
PDO
。请建议我如何以优化的方式制作有价值的课程。下面是我的课堂:

class.register.php
班级注册
{
私有$_confirm=0;
public$post_data=array();
私人$db;
受保护的$db_name='db_movies';
受保护的$db_用户='root';
受保护的$db_pass='keshav';
函数构造($post_数据)
{
$this->post_data=array_map('trim',$post_data);
$this->db_connect();
返回$this->post_数据;
}
受保护的函数db_connect()
{
试一试{
$this->db=new-PDO(“mysql:host=localhost;dbname=$this->db_-name”,$this->db_-user,$this->db_-pass);
返回$this->db;
} 
捕获(PDO$e){
打印“错误!:”$e->getMessage()。“
”; 模具(); } } 公共函数setPostIntoSession() { return$\u SESSION['post\u data']=$this->post\u data; } 公共函数checkEmailInDB() { $stmt=$this->db->prepare(“从tbl_用户中选择COUNT(*),其中email_地址=:email”); $stmt->bindParam(':email',$this->post_data['email_address',PDO::PARAM_STR); $stmt->execute(); $result=$stmt->fetchColumn(); 返回$result; } 公共函数insertIntoDB() { $qry=“插入tbl\U用户集 电子邮件地址=:电子邮件, first_name=:first_name, middle_首字母=:middle_名称, 姓氏=:姓氏, title=:title, 组织=:组织, 主电话=:主电话, 辅助电话=:辅助电话, 网站=:网站, 如何找到=:找到“; $stmt=$this->db->prepare($qry); $stmt->bindParam(':email',$this->post_data['email_address',PDO::PARAM_STR); $stmt->bindParam(':first\u name',$this->post\u data['first\u name',PDO::PARAM\u STR); $stmt->bindParam(':middle_name',$this->post_data['middle_initial'],PDO::PARAM_STR); $stmt->bindParam(':last_name',$this->post_data['last_name'],PDO::PARAM_STR); $stmt->bindParam(':title',$this->post_data['title',PDO::PARAM_STR); $stmt->bindParam(':organization',$this->post_data['organization',PDO::PARAM_STR); $stmt->bindParam(':primary_phone',$this->post_data['primary_phone'],PDO::PARAM_STR); $stmt->bindParam(':secondary\u phone',$this->post\u data['secondary\u phone',PDO::PARAM\u STR); $stmt->bindParam(':website',$this->post_data['website'],PDO::PARAM_STR); $stmt->bindParam(':found',$this->post_data['how_found'],PDO::PARAM_STR); 返回$stmt->execute(); } }
这里我用的是上等的

signup.php


我想我做的很长,请建议我应该在课堂上实现哪个函数。

免责声明:这是我的观点。 我喜欢按照MVC模式编写代码,并用它适当地继承类。为什么我要这么说,这是因为你似乎有很多东西混在一起(虽然代码是正确的)。对我来说,注册更多的是一个过程,而不是一个模型对象,因此为它设置一个模型类并不理想

这就是我如何优化它的: 首先创建一个处理登录/连接和查询执行的通用DB类。 然后,在创建模型时,从该类进行扩展,以便可以使用这些方法。 例如,对于注册,它将注册一个用户,所以假设您有一个用户表,您将创建一个扩展db的用户类。在该用户类中,您可以处理输入验证和插入数据库。 例如:


然后您可以拥有您的用户类(这里是它的结构)


请建议更好的优化和正确的方法来实现类。如果有帮助,请不要忘记标记为已解决。谢谢回复,但我正在使用PDO。。我只是想知道我应该在我的类中导出哪个函数,你可以使用烟雾信号存储,这仍然是相关的。在DB类中,编写与DB服务器建立连接和查询所需的所有代码,然后在继承的类上,向该类(或模型对象)添加特定代码。只需将我的mysql代码更改为您的PDO并尝试一下。您只需要在那里添加特定于pdo的代码。这只是为了说明在这种情况下我认为适当的技术。
class registration 
{
    private $_confirm = 0;
    public $post_data = array();
    private $db;
    protected $db_name ='db_movies';
    protected $db_user = 'root';
    protected $db_pass ='keshav';
    
    
    function __construct($post_data)
    {
            $this->post_data = array_map('trim',$post_data);
            $this->db_connect();
            return $this->post_data;
        
    }
    
    protected function db_connect()
    {
        try {
                $this->db =  new PDO("mysql:host=localhost;dbname=$this->db_name", $this->db_user, $this->db_pass);     
                return $this->db;
            } 
        catch (PDOException $e) {
                print "Error!: " . $e->getMessage() . "<br/>";
                die();
            }
    }
    
    public function setPostIntoSession()
    {
        return $_SESSION['post_data']=$this->post_data;             
    }

    public function checkEmailInDB()
    {
      $stmt = $this->db->prepare("SELECT COUNT(*) FROM tbl_user WHERE email_address = :email");
      $stmt->bindParam(':email',$this->post_data['email_address'],PDO::PARAM_STR);
      $stmt->execute();
      $result = $stmt->fetchColumn();
      return $result;
    }
    
    public function insertIntoDB()
    {
      $qry = "INSERT INTO tbl_user SET 
                                            email_address = :email,
                                            first_name = :first_name,
                                            middle_initial = :middle_name,
                                            last_name = :last_name,
                                            title =:title,
                                            organization = : organization,
                                            primary_phone =:primary_phone,
                                            secondary_phone =:secondary_phone,
                                            website =:website,
                                            how_found =:found ";
      $stmt = $this->db->prepare($qry);
      $stmt->bindParam(':email',$this->post_data['email_address'],PDO::PARAM_STR);
      $stmt->bindParam(':first_name',$this->post_data['first_name'],PDO::PARAM_STR);
      $stmt->bindParam(':middle_name',$this->post_data['middle_initial'],PDO::PARAM_STR);
      $stmt->bindParam(':last_name',$this->post_data['last_name'],PDO::PARAM_STR);
      $stmt->bindParam(':title',$this->post_data['title'],PDO::PARAM_STR);
      $stmt->bindParam(':organization',$this->post_data['organization'],PDO::PARAM_STR);
      $stmt->bindParam(':primary_phone',$this->post_data['primary_phone'],PDO::PARAM_STR);
      $stmt->bindParam(':secondary_phone',$this->post_data['secondary_phone'],PDO::PARAM_STR);
      $stmt->bindParam(':website',$this->post_data['website'],PDO::PARAM_STR);
      $stmt->bindParam(':found',$this->post_data['how_found'],PDO::PARAM_STR);
      return $stmt->execute();
    }
}
<?php ob_start(); session_start();
include_once ('includes/class.register.php');
$register = new registration($_POST);
$fine = true;

$register->setPostIntoSession();
//echo "<pre>";
//print_r($register);

if(count($_POST)>0){    
    
        if($register->checkEmailInDB())
        {
            echo $_SESSION['error'] ='Sorry,given e-mail address already exists.';
            $fine = false;
        }
        if ($register->post_data['pswd'] !== $register->post_data['confirm_pswd'])
        { 
            echo $_SESSION['error'] ='Sorry,both password are not matching';
            $fine = false;          
        }
        else 
        {
            $register->insertIntoDB();
        }
}
if($fine == false ) 
{
    //header("location:signup.php");
    //exit();
}
else
{
    echo "All izz Well";
}

//$register->watch($register);
?>
<?php
class ent_db
{
    private $DBUserName;
    private $DBPassword;
    private $DBHost;
    private $DBConnection = null;
    function __construct() 
    {
        $this->DBUserName = config::$dbuser;
        $this->DBPassword = config::$dbpass;
        $this->DBHost = config::$dbhost;
    }
    function executeQuery($sql)
    {
        return mysql_query($sql,$this->getConnection());

    }
     function getConnection()
    {
        if ($this->DBConnection===null)
            return mysql_connect($this->DBHost, $this->DBUserName,$this->DBPassword);
        else
            return $this->DBConnection;
    }
    function close()
    {
        if ($this->DBConnection!== null)
        {
            mysql_close($this->DBConnection);
            $this->DBConnection = null;
        }
    }
    function getAffectedRows()
{
    return mysql_affected_rows($this->getConnection());
}
function getAll($sql){

    $ret = $this->executeQuery($sql);
    if (mysql_num_rows($ret) !== 0)
    {
        while($row = mysql_fetch_assoc($ret))
        {
            $return[]=$row;
        }

        $this->close();
        return $return;

        }else
        {   
            $this->close();
            return false;
    }

        }
}
?>    
    <?php
class ent_structures extends ent_db
{
function getStructures($sort=null)
{
    $sql = "SELECT * FROM crm.structure WHERE disabled = 0";
    $sql.=($sort!==null)?" ORDER BY $sort":"";
    $ret = $this->executeQuery($sql);
    //or return $this->getAll();
.
.
.    
.