【问题标题】:Its possible to use $conn global var into class in php? [duplicate]可以在 php 中使用 $conn 全局变量到类中吗? [复制]
【发布时间】:2019-11-01 00:03:47
【问题描述】:

我试图在一篇文章中使用$conn 变量。 我创建了一个 configuration.php 文件

cnfiguration.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 变量。

class.article.php

class 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)中

  1. configuration.php
  2. class.article.php

在这一切之后,我得到一个错误,一个执行 show.article.php。 当我删除

global $conn;

我没有任何错误。但是我没有连接到数据库。

我需要一些解决方案来将$conn 变量包含到一个类中,因为这只是一个需要数据库连接的类,我将有大约 10-15 个带有 pdo 连接的类。

【问题讨论】:

    标签: php class oop pdo connection


    【解决方案1】:

    可以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");
        ...
      }
    }
    

    【讨论】:

      【解决方案2】:

      不能在类中使用 $GLOBALS。 你可以对你的条件做一些改变......

      cnfiguration.php

      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();
        }
      }
      

      class.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;
       }
      }
      

      【讨论】:

      • 希望对你有所帮助
      • 您需要在calss.articale.php 中包含configuration.php 文件
      猜你喜欢
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 2016-09-15
      • 2014-03-14
      相关资源
      最近更新 更多