$db = new PDO("mysql:host=".DBHOST.";dbname=".DBNAME, DBUSER, DBPASS);
function abc(){
global $db;
...
}
function xyz(){
global $db;
...
}
假设我有100个使用$db
的函数。
我必须100 times
写global $db
吗?
有没有办法自动访问所有功能中的$db
,例如javascript?
答案 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
...
}