2012-01-19 33 views
-2

问题:我有2个类,DB类和一个用户类,如果放在同一个类中,但是当我将它们分开时,我无法弄清楚如何让用户类使用DB类连接。PHP的操作系统不能很好地与对方沟通

我有'DBinterface'类和'用户'类。

*** dbinterface.php

<? class dbinterface { 
    var $dbHost, 
     $dbUser, 
     $dbName, 
     $dbPass, 
     $dbUserTable; 


    function User() { 
     $this->dbHost = 'host': 
     $this->dbUser = 'user'; 
     $this->dbName = 'name'; 
     $this->dbPass = 'pass'; 
     $this->dbUserTable = 'table'; 
    } 

} // End dbinterface class definition ?> 

*** user.php的

<? 
include('dbinterface.php'); 
    class User { 

     var $userID, 
      $userName, 
      $userPassword; 

     function registerUser($userName, $userPassword) { 
      // Connect to database 
      $dbLink = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass); 
      if(!$dbLink) die("Could not connect to database. " . mysql_error()); 

      // Select database 
      mysql_select_db($this->dbName); 

      // Insert data 
      $query = "insert into $this->dbUserTable values (NULL, \"$userName\", \"$userPassword\")"; 
      $result = mysql_query($query); 

      // Test to make sure query worked 
      if(!$result) die("Query didn't work. " . mysql_error()); 

      // Get the user ID 
      $this->userID = mysql_insert_id(); 

      // Close database connection 
      mysql_close($dbLink); 

      // Assign the values to the data members 
      $this->userName = $userName; 
      $this->userPassword = $userPassword; 
     } // End registerUser() ?> 

PS:我已删除的安全性和其他mumbojumbo,方便易读性。 任何和所有的帮助是非常appriciated!

+1

你不能只是“分开”类,并希望事情仍然是一样的。你的用户类正在引用现在处于完全不同类的东西,当然这不起作用。你需要真正考虑你想如何构建你的类... – deceze

+0

感谢乐观,但不幸的是,我是PHP新手,仍然在学习。 – user1082764

+0

@ user1082764这与php和更多与您的面向对象的设计和实现很少。我会建议在尝试使用它们之前学习OOP的基本原理。 – Shoan

回答

3

好吧。我会试着想象你想做什么:) 你需要一个类,你将存储数据库变量,如用户名,密码等,第二类将与db-class params一起工作。

/* file1的*/

Class db { 

    private $_dbLink; 
    private $_dbHost = 'host'; 
    private $_dbUser = 'user'; 
    private $_dbName = 'name'; 
    private $_dbPass = 'pass'; 
    private $_dbUserTable = 'table'; 

    public function connect() 
    { 
     $this->_dbLink = mysql_connect($this->_dbHost, $this->_dbUser, $this->_dbPass); 
     if(!$this->_dbLink) 
      throw new Exception ("Could not connect to database. " . mysql_error()); 
    } 

    public function getLink() 
    { 
     return $this->_dbLink; 
    } 

    public function getUserName() 
    { 
     return $this->dbUser; 
    } 

    public function getUserPass() 
    { 
     return $this->_dbPass; 
    } 

    /* create the same methods for each variable */ 
} 

/* file2的*/

Class User { 

    public function registerUser (/* params */) 
    { 
     $db = new db(); 
     $db->connect(); 

     /* your code */ 
     // Select database 
     mysql_select_db($db->getDb(), $db->getLink()); 

     // Insert data 
     $query = "insert into ".$db->getTable()." values (NULL, \"$userName\", \"$userPassword\")"; /* here is SQL-injection */ 
     $result = mysql_query($query, $db->getLink()); 
     /* and so on ...... */ 
    } 
} 

/* file3的*/

// include file1 
// include file2 
$user = new User; 
$user->registerUser(/* params */); 

这是快速的解决方案。你应该学习如何创建类和项目体系结构。使用php.net获取更多信息。阅读关于面向对象编程。并阅读有关安全代码的SQL注入。

0

$这里面的User类将只访问'Class User'中的变量或对象和函数,你不能访问'class dbinterface'中的变量或对象来访问你已经将该类扩展到你的User类的变量或对象。你可以尝试这样的

class User extends dbinterface { 

} 

这会给你结果。

相关问题