我创建了一个item类(item.class.php)和itemDAO类(itemDAO.class.php),我有另一个php文件(test.php)。我想使用test.php类中的那些类将数据插入数据库。我还有一个数据库类(db.class.php)。在这里,我坚持将对象的(项)值赋予itemDAO类中的函数。
这是我的item.class.php
<?php
class item {
private $id;
private $name;
private $description;
public function item($_id,$_name,$_description){
$this->id=$_id;
$this->name=$_name;
$this->description=$_description;
}
public function setId( $id )
{
$this->id = $id;
}
public function setName( $name )
{
$this->name = $name;
}
public function setDescription( $description )
{
$this->description = $description;
}
public function getId()
{
return $this->id;
}
public function getName()
{
return $this->name;
}
public function getDescription()
{
return $this->description;
}
}
?>
这是我的itemDAO.class.php
<?php
include("db.class.php");
include("item.class.php");
class itemDAO {
public function __construct() {
$d=new db();
}
public function AddItem(&$item) { //I am stuck here
$result = $db->query("INSERT INTO item VALUES('$i->') ");//Im stuck here
}
}
?>
如何获取item类对象以从对象获取值并传递给sql查询。 我的PHP很差,对java很了解。 在java中我们可以像这样调用
public boolean addItem(Item I) {
String query = "insert into Item(Item_Id, Item_Name, Item_Category, Measuring_Unit, Last_Price_Rate) values ('" + I.getItemID() + "','" + I.getItemName() + "','" + I.getItemCategory() + "','" + I.getMeasuringUnit() + "','" + I.getLastPriceRate() + "')";
System.out.println(query);
}
这是我的test.php
<?php
include("item.class.php");
include("db.class.php");
include("itemDAO.class.php");
$id="3";
$name="aaa";
$descriptio="hi";
$item= new item($id,$name,$descriptio);
$dao=new itemDAO();
$dao->AddItem($item->getId(),$item->getName(),$item->getDescription());
?>
我的数据库类
<?php
class db {
private $link;
// private $host="localhost", $username="root", $password="123", $database="item";
public function __construct(){
$this->host = "localhost";
$this->username = "root";
$this->password = "123";
$this->database = "item";
$this->link = mysql_connect($this->host, $this->username, $this->password)
OR die("There was a problem connecting to the database.");
mysql_select_db($this->database, $this->link)
OR die("There was a problem selecting the database.");
return true;
}
public function query($query) {
$result = mysql_query($query);
if (!$result) die('Invalid query: ' . mysql_error());
return $result;
}
public function __destruct() {
mysql_close($this->link)
OR die("There was a problem disconnecting from the database.");
}
}
?>
如何使用面向对象的PHP做同样的事情?
答案 0 :(得分:3)
请求停止通过引用绕过对象。从PHP5.x开始,没有必要使用处理程序来传递默认对象。
class itemDAO{
protected $db;
public function __construct( $db ){
$this->db= $db;
}
public function AddItem( $item ){
$query = 'INSERT INTO Item(Item_Id, Item_Name, Item_Category)
VALUE ( :id, :name, :category )';
$statement = $this->db->prepare( $query );
$statement->bindParam( ':id', $item->getId(), PDO::PARAM_INT );
$statement->bindParam( ':name', $item->getName() );
$statement->bindParam( ':category', $item->getCategory() );
return $statement->execute(); // returns false if query fails.
}
}
如果你知道PHP的基础知识以前有过Java经验,那么我建议你阅读"PHP in Action"。这将以Java友好的方式涵盖PHP中的OOP。
我也怀疑,您可能会从阅读this article中受益。它会向您解释如何使用PDO API(假设您已经使用过它)。
您需要了解如何使用spl_autoload_register()
。
答案 1 :(得分:0)
它实际上并没有那么不同,只记得在PHP中连接使用句点,并访问对象属性使用“ - &gt;”而不是一段时间。
public function AddItem(&$item)
$result = $db->query("insert into Item(Item_Id, Item_Name, Item_Category, Measuring_Unit, Last_Price_Rate) values ('" . $item->getItemID() . "','" . $item->getItemName() . "','" . $item->getItemCategory() . "','" . $item->getMeasuringUnit() . "','" . $item->getLastPriceRate() . "')");
}
另外,另外请注意,在PHP中,构造函数不仅仅是对象名称。你必须创建一个名为__construct
的函数。