如何像将数据库连接传递给类一样


how to pass a database connection like to a class

我想将连接链接传递给类。 我以这种方式尝试但无法获得解决方案这里数据库连接.php

<?php
global $con;
$db_host="localhost";
    $db_username="root";
    $db_pass="";
    $db_name="xxx";
$con= mysqli_connect("$db_host","$db_username","$db_pass") or die ("could not connect to mysql"); 
mysqli_select_db($con,$db_name) or die ("no database"); 
?>

和我的类 PHP 文件

<?php
include('dbconnect.php');
$chechout=new clscheckout;

$chechout->con=$con;  // direct assign connection link
$chechout->adult_count=2;
$chechout->child_count=1;
$chechout->child_cwb_count=1;
$chechout->setConn();   // assign throug function
echo $chechout->fnTotel();

class clscheckout{
   public  $pack_id;
   public  $pack_title;
   public  $user_id;
   public  $adult_count;
   public  $child_count;
   public  $child_cwb_count;
   public  $con;

      function setConn ($conn) {
          $con=$conn;
      }
       function fnTotel () {
            $qry='select * from package where pack_id='.$pack_id ;
            $rs=mysqli_query($con,$qry);
            if($rs)
                {
                $row=mysqli_fetch_array($rs);
                $child_wob_price=$row['child_wob_price'];
                $adult_price=$row['adult_price'];
                $child_price=$row['child_price'];
                }
            $adult_total=$adult_price*$adult_count;
            $chidl_total=$child_price*$child_count;
            $child_wob_total=$child_wob_price*$child_cwb_count;
            return $adult_total+$chidl_total+$child_wob_total;
       }
}
?>

我直接和通过功能分配类似。 但没有成功

最好的方法是首先创建一个 mysqli 类的实例:

数据库连接.php

$mysqli = new mysqli($host, $user, $pass, $db);
if($mysqli->connect_error) {
    die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}
return $mysqli;

然后

$connection = require_once('dbconnect.php');
$chechout = new clscheckout($connection);

并根据需要操作/传递它。这样你就不会使用讨厌的全局变量

class clscheckout{
   public  $con;

      public function __construct ($conn) {
          $this->con=$conn;
      }

然后将其用作对象

$qry='select * from package where pack_id='.$pack_id ;
$rs=$this->con->query($qry);

首先,我会通过您的构造函数分配连接

class clscheckout {
    // snip
    private $con;
    public function __contruct(mysqli $con) {
        $this->con = $con;
    }
    // etc

并实例化它

require_once 'dbconnect.php';
$chechout = new clscheckout($con);

然后,请确保在clscheckout方法中使用$this->con而不是$con 。这适用于所有类属性。见 http://www.php.net/manual/language.oop5.properties.php

您也不需要在dbconnect.php脚本中使用global $con

您是否尝试过(通过引用而不是值传递$conn)?

function setConn (&$conn) {
      $con=$conn;
}

有关详细信息,请参阅 http://php.net/manual/en/language.references.php。