1

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 
    }
}
?>

オブジェクトから値を取得して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 でこれと同じことを行うにはどうすればよいですか?

4

2 に答える 2

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 をカバーできます。

また、この記事を読むことで利益が得られるのではないかと思います。PDO API の使用方法を説明します (これが既に使用されていると仮定します)。

そして、あなたはそれを利用する方法を学ぶ必要がありますspl_autoload_register().

于 2012-10-21T09:44:39.450 に答える
0

PHP で連結するにはピリオドを使用し、オブジェクト プロパティにアクセスするにはピリオドの代わりに "->" を使用することを覚えておいてください。

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

于 2012-10-21T08:19:27.537 に答える