在文件B中包含文件A,反之亦然

时间:2012-02-20 18:38:04

标签: php include

变量和函数范围在“includer”和“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);
?>

2 个答案:

答案 0 :(得分:3)

执行PHP文件时,它会在全局范围内启动。包含文档说明;

  

当包含文件时,它包含的代码会继承该变量   发生包含的行的范围。任何可用的变量   在调用文件中的那一行将在被调用的内容中可用   文件,从那时起。但是,所有函数和类   在包含文件中定义的具有全局范围

由于当您包含第二个文件时,您处于全局范围内,因此变量范围将保持全局,其他所有内容将始终具有全局范围。换句话说,两个文件和两个文件中的所有内容都在全局范围内,两者之间的范围没有区别。

答案 1 :(得分:2)

当您包含文件时,您可以将其视为单个文件,即:

将测试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);
?>
希望你能理解两者之间的区别。本质上它类似于复制然后粘贴包含文件的包含命令。

变量和函数作用域就好像它是同一个文件,只要包含的文件在“includee”中的变量或函数调用之前