如何在一个地方创建一个变量全局

时间:2017-08-14 05:12:49

标签: php

$db = new PDO("mysql:host=".DBHOST.";dbname=".DBNAME, DBUSER, DBPASS);

function abc(){
    global $db;
    ...
}

function xyz(){
    global $db;
    ...
}

假设我有100个使用$db的函数。

我必须100 timesglobal $db吗?

有没有办法自动访问所有功能中的$db,例如javascript?

5 个答案:

答案 0 :(得分:1)

您可以直接在函数内使用超全局$GLOBALS['db'],而无需每次都声明。

仅出于这个原因,我们使用Object Oriented Approach或某些类似medoo的库。

更新: (来自您的comments之一)

在调用之前,您无需了解Scope of the Variable以了解其优势。

答案 1 :(得分:1)

据我所知,没有办法做这样的事情,你需要在你想要使用它的每个函数中声明global $db

答案 2 :(得分:1)

您可以将$db作为参数传递给函数或使用$GLOBALS['db']

function abc($db){
    $db->query();
}

$GLOBALS['db'] = new PDO("mysql:host=".DBHOST.";dbname=".DBNAME, DBUSER, DBPASS);
function abc (){
   $GLOBALS['db']->query();
}

答案 3 :(得分:1)

如果需要访问变量,那么是的,你必须在所有函数中添加全局或使用$ _GLOBALS

因为你正在使用函数,所以最好创建静态类

class DB {
   private static $db       = null;
   public static function connect() {
     if(!empty(self::$db)) {
       return self::$db;
     }
     self::$db = new PDO("mysql:host=".DBHOST.";dbname=".DBNAME, DBUSER, DBPASS);
    }
}

使用DB :: connect() - > query();

访问数据库

答案 4 :(得分:1)

正如大家已经说过的那样,你必须使用关键字global来避免与局部变量混合:

function my_func() {
    global $db;
    ...
}

如果你真的需要一个全局变量,一种可能的方法是使用$_GLOBALS

$_GLOBALS['db'] = $db;    

function my_func() {
    $_GLOBALS['db']->...;
    ...
}

最好使用OOP,但有时候,开发人员需要编写一个快速编写脚本的脚本,PHP就是一个不错的选择。如果您不想使用OOP方式并且仍希望在许多函数中使用全局变量,那么这是一种解决方法。

1-创建一个文件,我们称之为my_globals.php,其中包含以下内容:

// my so many globals stay here
global $db;
global $a;
global $b;
...

2-在你的主文件中,你会做这样的事情:

$db = new PDO("mysql:host=".DBHOST.";dbname=".DBNAME, DBUSER, DBPASS);
$a = ...;
$b = ...;

function abc(){
    include 'my_globals.php';// this will be equivalent as typing all your global variables
    ...
}

function xyz(){
    include 'my_globals.php';// this will be equivalent as typing all your global variables
    ...
}