亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以在 php 類中使用 $conn 全局變量?

是否可以在 php 類中使用 $conn 全局變量?

PHP
喵喔喔 2021-08-28 09:06:43
我試圖在$conn課堂文章中使用變量。我創建了一個 configuration.php 文件配置文件try {    $conn = new PDO('mysql:host='.$dbhost.';dbname='.$dbname, $user, $pass);    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);} catch (PDOException $e) {    print "Error!: " . $e->getMessage() . "<br/>";    die();}我同意,這是建立數據庫連接的經典方式。我試著$conn像我說的那樣在課堂上使用這個變量。類.article.phpclass Article {    global $conn;    public $article_id;    function setArticle($article_id) {        $this->article_id = $article_id;    }    function getArticle($article_id){        $getArticlee = $conn->prepare("SELECT * FROM articles WHERE id = :id");        $getArticlee->bindParam(':id', $article_id, PDO::PARAM_INT);        $getArticlee->execute();        return $getArticlee;    }}我需要按下一個順序執行文件(show.article.php)中的兩個文件配置文件類.article.php在所有這些之后,我得到一個錯誤,執行一個 show.article.php。當我刪除global $conn;我沒有任何錯誤。但是后來我沒有連接到數據庫。我需要一些解決方案來將$conn變量包含在一個類中,因為這只是一個需要數據庫連接的類,我將有大約 10-15 個帶有 pdo 連接的類。
查看完整描述

2 回答

?
LEATH

TA貢獻1936條經驗 獲得超7個贊

你可以放在方法global $conn里面getArticle。


...


function getArticle($article_id){

  global $conn; // not recommended


  $getArticle = $conn->prepare("SELECT * FROM articles WHERE id = :id");

  ...

}

然而,這種方法是不鼓勵的,因為現在你的Article類對外部狀態有隱含的依賴,并且更難推理和測試。


更好的選擇是將PDO對象傳遞給Article構造函數并將其保留為您的方法可以調用的私有屬性。


class Article {

  private $conn;

  public $article_id;

  ...


  function __construct(\PDO $conn) {

    $this->conn = $conn;

  }


  function getArticle($article_id){

    $getArticlee = $this->conn->prepare("SELECT * FROM articles WHERE id = :id");

    ...

  }

}


查看完整回答
反對 回復 2021-08-28
?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

不可能在類中使用 $GLOBALS。你可以在你的環境中做一些改變......


配置文件


class Config{

 function __Construct(){

   try {

   $conn = new PDO('mysql:host='.$dbhost.';dbname='.$dbname, $user, $pass);

    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

   return $conn;

    } 

   catch (PDOException $e) {

    print "Error!: " . $e->getMessage() . "<br/>";

    die();

  }

}

類.article.php


class Article {

protected $conn= new Config;

public $article_id;

function setArticle($article_id) {

    $this->article_id = $article_id;

}


 function getArticle($article_id){

    $getArticlee = $this->conn->prepare("SELECT * FROM articles WHERE id = :id");

    $getArticlee->bindParam(':id', $article_id, PDO::PARAM_INT);

    $getArticlee->execute();

    return $getArticlee;

 }

}


查看完整回答
反對 回復 2021-08-28
  • 2 回答
  • 0 關注
  • 295 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號