【问题标题】:php access db class from inside a functionphp从函数内部访问db类
【发布时间】:2013-02-08 05:57:26
【问题描述】:

我的数据库类运行良好,我称它为$db = new Database('user', 'pass', 'db', 'host');。我在脚本的顶部定义了这个数据库,但是在脚本的后面我试图在函数内部使用连接,但似乎$db 不是全局的,所以我的函数无法访问它。我可以在脚本中的每个函数中创建一个新的数据库类连接,但我真的很想将$db 作为全局访问点来访问。

这里有一些代码:

 require_once('database_class.php');

 $db = new Database('user', 'pass', 'db', 'host');



 // I can reach the $db here and make the $db->PDO->'statement'();



 function userExists($user) {

     $bool = false;

     // But in here I can't access $db...
     $query = $db->PDO->query('SELECT * FROM login WHERE username = "$user"');

     $result = $query->fetch();

     if ($result) {

         // User exists
         $bool = true;

     }

     return $bool;

 }

【问题讨论】:

  • 单例模式研究。它主要用于您的目的。
  • 并不是真正的“答案”,但我主要做的是创建类方法(函数),这些方法(函数)只是打开连接、进行查询、关闭连接,然后处理并返回数据。可能是一些专家说最好让连接保持打开状态,但我从未注意到这样做会影响性能:)

标签: php class function pdo


【解决方案1】:

将全局 $db 放在函数的开头,如下所示:

 function userExists($user) {
      global $db;

     // Rest of code here

函数中的变量在 PHP 中默认只存在于本地。要使用未作为参数传递的函数外部声明的变量(例如 $user),您需要使用如上所示的全局变量。

【讨论】:

  • 但是当变量在函数外部定义时,它是自动“全局”的,还是如何?
  • 要么将其作为函数参数传递,要么将变量声明为全局变量。
  • @PhilipJensBramsted 当它在函数外部定义时它是全局的,但函数内部的范围不同。通过添加关键字global,您将该变量添加到您的函数范围。
【解决方案2】:

您可能只是修改您的函数以将 $db var 作为参数。例如:

function userExists($user, $db) {
    ...
}

默认情况下,对象是通过引用传递的(请参阅here),因此您不会在每次调用时无意中复制 $db 对象。

【讨论】:

  • 这将有很长的路要走,因为该函数是由一个函数调用的函数调用的......但是是的......这实际上可能是一种方法。
【解决方案3】:

我也使用类进行连接和查询。但这将有助于您在类中已经定义连接所需的变量,因此您不必在每一页代码中重复它们。 也许这个?使用 db 作为参数。

function userExists($user, $db) { //codecodecode }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多