PHP:如何访问已在其外部声明的函数内的变量?

Chr*_*ris 2 php visibility function include

在每个页面的最开始,我都包含一个启动SESSION等的文件,让我们调用它session.php.在这个文件中session.php,我包含一个包含函数的文件,让我们调用它function1.php,因为我需要函数可用session.php.

然而,在后来的主页我还包括function2.php其需要访问设置变量session.php,所以我还试图包括session.phpfunction2.php.

问题是因为function1将被多次声明而发生错误...

致命错误:无法重新声明function1()(之前在...中声明)

那么,对于这个更优雅,更干净的解决方案呢?你怎么能解决它?

基本上,我需要访问主页中包含的函数内的变量...之前...

oct*_*ern 6

这不是公共变量和私有变量的问题,因为您希望来自session.php的变量不是对象的一部分.它们只是您在全局范围内声明(可能)的变量,现在需要在function2.php中访问.

第一:是function2.php的内容......一个函数?如果没有,那么该文件应该与脚本中包含它的位置具有相同的范围,并且它应该能够很好地访问它们.

如果您需要访问session.php变量的地方是一个函数或一个对象,那么您有几个选择.

0.重新包含文件

这就是你现在要做的.它失败是因为session.php还包含一个函数定义,并且一旦创建了函数就无法重新定义它.作为一种变通方法,您可以将变量定义移动到单独的文件中,并将其包含在function2中.这很笨拙但很简单.

1.调用变量时将变量传递给函数.

  • 优点:简单灵活.
  • 缺点:使函数调用成为一种痛苦.您可以通过将它们全部放入单个参数数组中来简化它,而不是分别传递每个参数.

2.使用 global

在function2的开头,只需添加命令global $var1, $var2 ...即可导入脚本中其他地方使用的所有变量.

这也很简单,但是使用全局变量被许多程序员看作草率,并让您在其他地方打开难以调试的错误.

3.使用常量

在session.php中,将要共享的变量定义为常量.例如,define("PASSWORD", "coolpassword123").常量可以从内部函数或对象等引用,并且在声明后永远不能更改.例如,echo(PASSWORD)(没有报价,没有$).

常量通常是解决此类问题的最佳方法,只要1)您不需要更改它们的值,2)您可以坚持使用简单的数字或字符串值.常量不能是数组,对象等.