Php 可变范围和功能

Php 可变范围和功能,php,Php,多年来,我一直在做这样的事情: function connectToDatabase() { require_once('config.php'); $dbc = new PDO($dsn, $db['user'], $db['pass']); // Do some stuff ... } config.php <?php $db = array("user" => "username", "pass" => "p

多年来,我一直在做这样的事情:

   function connectToDatabase() {
       require_once('config.php');
       $dbc = new PDO($dsn, $db['user'], $db['pass']);
       // Do some stuff ...
   }
config.php

<?php

   $db = array("user" => "username", "pass" => "password");

事实上,即使在较旧的PHP版本中,或者在使用
register\u globals
时,这也不应该起作用

要将全局变量导入函数,需要一个
global$varname语句,或将变量传递给函数(通常更可取,如图所示)。唯一的例外是超球体

你1000%确定不是这样的吗:

   function connectToDatabase() {
       require_once('config.php');
       $dbc = new PDO($dsn, $db['user'], $db['pass']);
       // Do some stuff ...
   }

实际上,这应该永远不会起作用,即使是在较旧的PHP版本中,也不能使用
register\u globals

要将全局变量导入函数,需要一个
global$varname语句,或将变量传递给函数(通常更可取,如图所示)。唯一的例外是超球体

你1000%确定不是这样的吗:

   function connectToDatabase() {
       require_once('config.php');
       $dbc = new PDO($dsn, $db['user'], $db['pass']);
       // Do some stuff ...
   }

事实上,在
connectToDatabase
函数的开头,作用域中没有变量。您也应该得到关于未声明变量的警告。可能是因为数据库安装的配置导致它使用默认用户名和密码,所以它工作了?

事实上,在
connectToDatabase
函数的开头,作用域中没有变量。您也应该得到关于未声明变量的警告。可能是因为数据库安装的配置导致它使用默认用户名和密码,所以它才起作用?

我正在检查一些脚本,它们包含了我的原始示例。我有一个专用的centos服务器,这是我自己不久前配置的。这是我主持所有客户工作的地方。我知道这看起来很奇怪,甚至是不可能的,但这就是我一直在做的事情,直到今天,因为它不起作用,我被难倒了一个多小时。@Jamie weird!那么@deceze建议的是我能想到的唯一解释。我只是在检查我的一些脚本,它们包含了我的原始示例。我有一个专用的centos服务器,这是我自己不久前配置的。这是我主持所有客户工作的地方。我知道这看起来很奇怪,甚至是不可能的,但这就是我一直在做的事情,直到今天,因为它不起作用,我被难倒了一个多小时。@Jamie weird!那么@deceze建议的是我能想到的唯一解释。如果这是我在此正式宣布的解释,我将这项技术称为“意外编程”,或者,正如@Pekka应该理解的,mehr Glück als Verstand.)如果这是事实上的解释,我在此正式宣布这项技术被称为“意外编程”,或者,正如@Pekka所理解的,mehr Glück als Verstand.)