为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以在 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条经验 获得超6个赞

你可以放在方法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 关注
  • 264 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信