【问题标题】:Variable Scope and Functions变量范围和函数
【发布时间】:2010-10-26 09:54:33
【问题描述】:

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

config.php

<?php

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

functions.php

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

我刚刚阅读了 PHP 手册,并且应该可以使用,但多年来一直如此。是否有任何服务器配置允许它工作?

我刚刚编写了一个新脚本并出现错误。 $db 数组甚至没有初始化。

【问题讨论】:

    标签: php


    【解决方案1】:

    确实,connectToDatabase 函数开头的范围内有 no 变量。您也应该收到有关未声明变量的警告。可能是因为您的数据库安装配置导致它使用默认用户名和密码?

    【讨论】:

    • 如果这真的是解释,我在此正式宣布这种技术被称为 programming by serendipity,或者,正如@Pekka 应该理解的那样,mehr Glück als Verstand 。 ;)
    【解决方案2】:

    这实际上应该永远不会起作用,即使在较旧的 PHP 版本和 register_globals 中也不行。

    要将全局变量导入函数,需要global $varname; 语句,或者将变量传递给函数(通常最好使用globals are bad)。唯一的例外是超全局变量。

    你是否 1000% 确定它不是这样的:

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

    ?

    【讨论】:

    • 我只是在检查我的一些脚本,它们包含我的原始示例。我有一个专用的 centos 服务器,不久前我自己配置​​了它。这就是我托管所有客户工作的地方。我知道这看起来很奇怪,甚至是不可能的,但这是我一直在做的事情,直到今天它让我难倒了一个多小时,因为它不起作用。
    • @Jamie 很奇怪!那么@deceze 的建议是我能想到的唯一解释。
    猜你喜欢
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 2020-07-22
    • 2021-12-18
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    相关资源
    最近更新 更多