"includer"answers"includee"在变量和函数作用域上有什么区别?
例如,这两个测试的工作原理相同,但是否存在我应该了解的范围界定细节?
测试1:
文件"one.php":
<?php
$a = 5;
include("two.php");
?>
文件"two.php:
<?php
function f($x) { return $x * 2; }
echo f($a);
?>
测试2:
文件"one.php":
<?php
$a = 5;
?>
文件"two.php:
<?php
include("one.php");
function f($x) { return $x * 2; }
echo f($a);
?>
当您执行一个PHP文件时,它在全局范围内启动。包括文件状态;
当包含文件时,它包含的代码将继承变量发生include的行的范围。任何可用变量调用文件中的那一行将在被调用的文件,从那时起。但是,所有函数和类包含文件中定义的具有全局作用域。
由于当您包含第二个文件时,您在这两种情况下都处于全局范围内,因此变量范围将保持全局,而包含的所有其他文件都将始终具有全局范围。换言之,两个文件和两种情况下的所有内容最终都在全局范围内,并且两者在范围界定上没有区别。
当您包含一个文件时,您可以将其视为单个文件,即:
将1作为单个文件进行测试:
<?php
// execute commands in this file
$a = 5;
// then continue execution of include("two.php");
function f($x) { return $x * 2; }
echo f($a);
?>
将测试2作为单个文件:
<?php
// first include include("one.php");
$a = 5;
// then continue execution of two.php
function f($x) { return $x * 2; }
echo f($a);
?>
希望你能理解两者之间的区别。本质上,它类似于复制然后粘贴include文件中包含的命令。
变量和函数的作用域就好像是同一个文件,只要包含的文件在";包括";