在函数文件中使用require / require_once()

时间:2011-05-16 18:59:54

标签: php

我的functions.php文件只是许多不同功能的占位符。我有另一个文件settings.php,我用它来存储不同的设置。 functions.php中的一些函数需要访问settings.php中的一些变量,所以我试过了:

require("settings.php")

在functions.php文件的顶部,但似乎没有让我的函数访问settings.php中的变量。我需要将require(“settings.php”)分别放在每个函数中。

有没有办法可以将settings.php中的变量声明为可以全局访问functions.php中定义的所有函数?

谢谢,

4 个答案:

答案 0 :(得分:3)

您需要修改functions.php中的函数,以使用settings.php中定义的全局变量。

内部settings.php;

$var1 = "something";
$var2 = "something else";

使用global关键字:

function funcName() {
  global $var1;
  global $var2;

 // Rest of the function...
}

或者更优选地,使用$GLOBALS[]超全局数组。在全局范围内声明的任何变量,比如我假设您的settings.php变量,都将作为数组键包含在$GLOBALS[]中。与在每个函数中使用global关键字相比,它的可读性要好一些。

function funcName() {
  $y = $GLOBALS['var1'];
  $x = $GLOBALS['var2'];
 // Etc...
}

答案 1 :(得分:3)

虽然您已在settings.php文件中设置了这些变量,但当您尝试在函数中引用它们时,它将无效。这是因为函数中的变量本地作用于函数。

要访问这些全局变量,您需要使用global关键字将全局变量纳入范围。

例如:

// Declared in settings.php
$x = 1234;


// One of your functions
function MyFunc()
{
  global $x;

  DoSomething($x);
}

您需要为访问$x的每个功能执行此操作。

有关详细信息,请参阅:

  

Variable scope - php.net docs

答案 2 :(得分:2)

我不知道您的问题的详细信息,但您可能希望在每个功能中使用require_once()。这似乎比使用一些全局变量更好。

答案 3 :(得分:1)

你在想全局变量。

然而,这不是最佳方式。

你可以创建一个类吗?

class SomeClass
{
    private $settings;

    function __construct()
    {
        require_once($settings);
        $this->settings = $variable(s) from settings file
    }

    function some_function()
    {
        print($this->settings['something']);
    }
}