Ich bin neu in PHP OOP. Ich habe eine Frage zu meiner Situation.PHP oop wie man eine andere Klassenmethode einfacher aufrufen kann?
db.php
class db{
protected $db_host;
protected $db_name;
protected $db_user_name;
protected $db_pass;
public function __construct() {
$this->db_host="localhost";
$this->db_name="bs";
$this->db_user_name="root";
$this->db_pass="";
}
public function conn(){
try {
$conn = new PDO("mysql:host=$this->db_host;dbname=$this->db_name", $this->db_user_name="root", $this->db_pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $conn;
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
}
}
item.php
require "../../includes/db.php";
class item{
public $user_uid;
public $last_id;
public $display_item;
public $iid;
protected $item_id;
protected $item_name;
protected $item_price;
protected $item_quantity;
public function add_item($uid,$item_id,$item_n,$item_p,$item_q){
$db = new db();
$conn=$db->conn();
$this->user_uid=$uid;
$this->item_id=$item_id;
$this->item_name=$item_n;
$this->item_price=$item_p;
$this->item_quantity=$item_q;
try {
$sql = "INSERT item(uid,item_id,item_name,item_price,item_quantity)
VALUES('$this->user_uid','$this->item_id','$this->item_name','$this->item_price','$this->item_quantity')";
$conn->exec($sql);
$this->last_id=$conn->lastInsertId();
}
catch(PDOException $e){
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
}
public function display_item($uid){
$db = new db();
$conn=$db->conn();
$this->user_uid=$uid;
try{
$sql="SELECT * FROM item where uid='$this->user_uid'";
$statement=$conn->query($sql);
while($row=$statement->fetch()){
$this->iid[]=$row['iid'];
$this->display_item[]=[$row['item_id'],$row['item_name'],$row['item_price'],$row['item_quantity']];
}
}
catch(PDOException $e){
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
}
}
wie man es von item.php sehen können, habe ich
$db = new db();
$conn=$db->conn();
in add_item anrufen() und display_item().
Das bedeutet also jede Methode, die ich auf Datenbankverbindung zugreifen muss, muss ich tun. Gibt es einen einfacheren Weg, dies zu tun, indem Sie $ db = new db() in einer anderen Klasse nicht anlegen, indem Sie meine Codes ändern?
ODER
habe ich einige Funktionen verzichten, die PHP kann das tun?
Meine gewünschte Art und Weise es
require "../../includes/db.php";
$db = new db();
$conn=$db->conn();
class item{
...
...
public function add_item($uid,$item_id,$item_n,$item_p,$item_q){
try {
$sql = "INSERT item(uid,item_id,item_name,item_price,item_quantity)
VALUES('$this->user_uid','$this->item_id','$this->item_name','$this->item_price','$this->item_quantity')";
$conn->exec($sql);
}
public function display_item($uid){
....
try{
$sql="SELECT * FROM item where uid='$this->user_uid'";
$statement=$conn->query($sql);
so, dass ich erklären, nur 1 Mal() zu tun
$db = new db();
$conn=$db->conn();
in Klasse item() und es für den Rest Methoden.
hinzufügen conn nur in den Eigenschaften, innerhalb des Konstruktors von dort verbinden – Ghost
@Ghost hallo Geist, schön von Ihrer Antwort zu hören. Kann mir ein Beispiel zeigen? Ich brauche nur ein einfaches Beispiel! – gosulove
Ich würde empfehlen, vielleicht in eine Abhängigkeitsinjektionsbehälterlösung wie Pimple zu schauen; http://pimple.sensiolabs.org/ oder http://php-di.org/ – Perspective