PHP - 从包含的脚本

时间:2015-07-14 16:18:46

标签: php scope include

我有一个文件列表,我在主脚本的开头require_once

在其中一个文件中,我有很多功能 在另一个文件中,我有一堆常量(目前是变量,但它们本质上是常量)。

Main.php

require_once \Constants.php
require_once \Functions.php

在main.php中,我能够调用函数并从各自的脚本中调用常量...我也可以调用函数并将Constants.php中的常量作为参数传递给函数。
但是,我无法使用嵌入常量的函数。
换句话说,我不能使用Functions.php中已经包含函数中Constants.php文件变量的函数,但如果它们没有来自其他包含文件的任何变量,我可以使用Functions.php中的函数。在功能内。

Function FirstFunction(){ echo $Constant1; return 1 }

FirstFunction()使用Constants.php中的$ Constant1并且不起作用。

Function SecondFunction($param){ echo $param; return 1 }

SecondFunction()可以从Constants.php传递$ Constant1作为参数,它可以正常工作。

问题:

有没有办法让我能够使用我的Main.php来调用函数文件和常量文件,并让函数文件使用常量文件中的变量而无需在Main.php中显式调用或传递它们? / p>

如果我将它们连接起来(Main.php调用Functions.php; Functions.php调用Constants.php),这会有用吗? (我有点尝试过,但还不够信任或排除这种方法)。

注意

我能找到的大部分信息都是关于使用包含文件中的变量,但没有具体说明使用其他包含文件中的变量的包含文件。

1 个答案:

答案 0 :(得分:1)

这听起来像是一个简单的范围问题,与你的包含周期无关。

当您在$name='value';的根范围内创建'常量'作为普通PHP变量(Constants.php)时,必须先通过引用它们在任何后续函数中调用它们。 ..像这样:

$name='value';

    /** other stuff **/

function Foo(){
    global $name;
    //You have access to $name here
}

真正的解决方案是,实际上将常量定义为实常数,这使得它们可以在任何范围内使用......像这样:

define('NAME','value');

    /** other stuff **/

function Foo(){
    //You immediately have access to NAME here
}

真正常量的唯一缺点是,它们是不变的...意思是,它们不能在你的脚本中稍后更改。

您可以在此处详细了解“范围”:http://php.net/manual/en/language.variables.scope.php