如何通过函数传递对象和访问数据

时间:2012-10-21 08:08:40

标签: php oop

我创建了一个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做同样的事情?

2 个答案:

答案 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的函数。