PHP - 从包含脚本访问包含脚本中的变量
PHP - Accessing variables in an included script from an included script
我在主脚本的开头有一个文件列表 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?
如果我以菊花链方式连接它们(Main.php 调用 Functions.php;Functions.php 调用 Constants.php),这可行吗? (我尝试过这种方法,但还不够好,无法信任或排除这种方法)。
备注
我能找到的大部分信息都是关于使用包含文件中的变量,但不是专门关于使用其他包含文件中的变量的包含文件。
include()
就像被包含文件的内容字面上 cut/paste 到 include() 调用所在的位置:
variables.php:
<?php
$foo = 'bar';
test.php:
<?php
var_dump($foo); // notice: undefined variable
include('variables.php');
var_dump($foo); // string(3) "bar"
请注意,标准 PHP 变量范围规则适用。因此,如果您在函数内执行 include()
:
<?php
var_dump($foo); // notice: undefined variable
function test() {
var_dump($foo); // notice: undefined variable
include('variables.php');
var_dump($foo); // string(3) "bar"
}
test(); // call the test function
var_dump($foo); // notice: undefined variable
注意 $foo
是如何不存在的 before/after 函数是 defined/called - 它只会存在于函数中,并且只有在它被包含之后才存在()。
如果您希望您的标准变量是真正的全局变量,则必须在全局范围内包含该文件,或者将它们声明为全局变量:
variables.php:
<?php
global $foo;
$foo = 'bar';
然后使用相同的脚本,$foo
将 "magically" 出现在最后的 var_dump 中,因为它已被设为全局。
这听起来像是一个简单的范围问题,与您的包含周期无关。
当您在 Constants.php
的根范围内创建 'constants' 正常 PHP 变量 ($name='value';
) 时,必须在任何内部调用它们以后的功能,通过首先引用它们......像这样:
$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
}
真正常量的唯一缺点是,它们是常量...意思是,它们不能在您的脚本中稍后更改。
您可以在此处阅读有关 'scope' 的更多信息:http://php.net/manual/en/language.variables.scope.php
我在主脚本的开头有一个文件列表 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?
如果我以菊花链方式连接它们(Main.php 调用 Functions.php;Functions.php 调用 Constants.php),这可行吗? (我尝试过这种方法,但还不够好,无法信任或排除这种方法)。
备注
我能找到的大部分信息都是关于使用包含文件中的变量,但不是专门关于使用其他包含文件中的变量的包含文件。
include()
就像被包含文件的内容字面上 cut/paste 到 include() 调用所在的位置:
variables.php:
<?php
$foo = 'bar';
test.php:
<?php
var_dump($foo); // notice: undefined variable
include('variables.php');
var_dump($foo); // string(3) "bar"
请注意,标准 PHP 变量范围规则适用。因此,如果您在函数内执行 include()
:
<?php
var_dump($foo); // notice: undefined variable
function test() {
var_dump($foo); // notice: undefined variable
include('variables.php');
var_dump($foo); // string(3) "bar"
}
test(); // call the test function
var_dump($foo); // notice: undefined variable
注意 $foo
是如何不存在的 before/after 函数是 defined/called - 它只会存在于函数中,并且只有在它被包含之后才存在()。
如果您希望您的标准变量是真正的全局变量,则必须在全局范围内包含该文件,或者将它们声明为全局变量:
variables.php:
<?php
global $foo;
$foo = 'bar';
然后使用相同的脚本,$foo
将 "magically" 出现在最后的 var_dump 中,因为它已被设为全局。
这听起来像是一个简单的范围问题,与您的包含周期无关。
当您在 Constants.php
的根范围内创建 'constants' 正常 PHP 变量 ($name='value';
) 时,必须在任何内部调用它们以后的功能,通过首先引用它们......像这样:
$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
}
真正常量的唯一缺点是,它们是常量...意思是,它们不能在您的脚本中稍后更改。
您可以在此处阅读有关 'scope' 的更多信息:http://php.net/manual/en/language.variables.scope.php