我有一个文件列表,我在主脚本的开头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),这会有用吗? (我有点尝试过,但还不够信任或排除这种方法)。
我能找到的大部分信息都是关于使用包含文件中的变量,但没有具体说明使用其他包含文件中的变量的包含文件。
答案 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