根据PHP manual $ a,以下代码段中的 b.inc 应该可用:
<?php
$a = 1;
include 'b.inc';
?>
但是当我在调用静态方法时尝试执行相同操作时,$ a似乎超出了范围。
class foo {
public static function bar() {
$a = 1;
include('b.inc');
}
}
foo::bar();
我误解了什么吗? 编辑:好的,我是个白痴,各位。我正在使用包装器的包装函数 - 来填充包含路径。这使变量超出范围。谢谢你的帮助。
答案 0 :(得分:1)
这完全适合我。如果你准确地描述了这个问题,必须在b.inc。的内部发生一些事情。
答案 1 :(得分:0)
在课堂上你需要说你的意思是全球性的。
class foo {
public static function bar() {
global $a;
var_dump($a);
}
}
foo::bar();
答案 2 :(得分:0)
<?php
//a.php
class test
{
public static function run()
{
$a = 'Some value';
include 'b.php'; //echo $a;
}
}
test::run();
?>
在我的测试中一切正常。
答案 3 :(得分:0)
功能范围与全局范围不同。 b.inc
将看到$ a,在b.inc
中创建的任何变量都将在foo :: bar()的范围内(除非它们被定义为全局变量,或者在它们自己的函数范围内)。
您可以使用以下代码对此进行测试:
function foo() {
$a = 1;
include '1.php'; // modify and initialize, ie. $a++; $b = 3;
include '2.php'; // test the values: $a == 2; $b == 3
}
我们在其他脚本中引导WordPress时偶尔会遇到这个问题:初始化脚本假设它们位于最外层,因此它们会设置$wpdb
(数据库对象)之类的变量,但该文件实际上会得到在某个函数中创建了require_once()
。解决方案是在进入任何功能范围之前始终在应用程序中引导WordPress。