-5

クラスに接続リンクを渡したい。私はそのように試みますが、ここで解決策を得ることができません dbconnect.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;

       }

}

?>

like を直接および関数を介して割り当てます。しかし、成功しません

4

3 に答える 3

1

最善の方法は、最初に mysqli クラスのインスタンスを作成することです。

dbconnect.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);
于 2013-09-26T06:17:16.150 に答える
1

まず、コンストラクターを介して接続を割り当てます

class clscheckout {

    // snip

    private $con;

    public function __contruct(mysqli $con) {
        $this->con = $con;
    }

    // etc

そしてそれをインスタンス化します

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

次に、メソッドで の代わりにを必ず使用$this->conしてください。これは、すべてのクラス プロパティに当てはまります。http://www.php.net/manual/language.oop5.properties.phpを参照してください。clscheckout$con

global $conまた、dbconnect.phpスクリプトでは必要ありません。

于 2013-09-26T06:13:50.570 に答える
0

これを試しましたか (値ではなく参照で $conn を渡します) ?

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

詳細については、 http://php.net/manual/en/language.references.phpを参照してください。

于 2013-09-26T06:14:28.270 に答える