在每个页面的最开头,我包含一个启动SESSION等的文件,我们称之为session.php
。在这个文件session.php
中,我包含一个包含函数的文件,我们称之为function1.php
,因为我需要函数在session.php
中可用。
但是,在主页的后面,我还包含了function2.php
需要访问session.php
中设置的变量,所以我另外尝试在function2.php
中包含session.php
。
问题是发生错误,因为函数 1 将被多次声明......
致命错误:无法重新声明函数 1()(之前在 ...
那么,有什么更优雅、更干净(更)的解决方案呢?你怎么能解决它?
基本上,我需要访问之前包含在主页中的函数内的变量......
公共和私有变量的问题,因为您希望从session.php获得的变量不是对象的一部分。它们只是您在全局范围内(可能)声明的变量,现在需要在 function2.php 中访问。
第一:功能2的内容.php...一个函数?如果不是,则该文件的范围应与脚本中包含它的位置相同,并且应该能够正常访问它们。
如果需要访问会话.php变量的位置是函数或对象,则有几种选择。
0. 重新包含文件
这就是你现在要做的。它失败是因为 session.php 还包含一个函数定义,并且创建函数后无法重新定义函数。作为一种解决方法,您可以将变量定义移动到一个单独的文件中,并将其包含在 function2 中。这很笨拙,但很简单。
1. 调用函数时将变量传递给函数。
- 优点:简单灵活。
- 缺点:使调用函数有点痛苦。您可以通过将它们全部放入单个参数数组中来简化此操作,而不是单独传递每个参数。
2. 使用global
在 function2 的开头,只需添加命令 global $var1, $var2 ...
即可导入脚本中其他地方使用的任何变量。
这也非常简单,但是使用全局变量被许多程序员视为草率,并且会在其他地方出现难以调试的错误。
3. 使用常量
在session.php中,定义要共享为常量的变量,例如,define("PASSWORD", "coolpassword123")
.常量可以从函数或对象等内部引用,并且在声明后永远无法更改。例如,echo(PASSWORD)
(没有引号,没有$)。
常量通常是此类问题的最佳解决方案,只要 1) 您不需要更改它们的值,以及 2) 您可以坚持使用简单的数字或字符串值。常量不能是数组、对象等。
尝试include_once
而不是include
http://php.net/manual/en/function.include-once.php
编辑:完整示例
主.php
<?php
include_once 'session.php';
include 'function2.php';
会话.php
<?php
include_once 'function1.php';
function1('session.php');
功能1.php
<?php
function function1($calledFrom)
{
echo 'function1 called from: ' . $calledFrom . PHP_EOL;
}
功能2.php
include_once 'function1.php';
function1('function2.php');
将它们全部放在同一个文件夹中并运行
php main.php
输出为:
函数 1 调用自:会话.php
函数1 调用自:函数 2.php
首先,请确保对将包含的文件中的函数不使用相同的名称。
之后,您可以简单地将有问题的变量作为函数的参数传递
function1($variable1);
然后在函数中检索它
function function1($getvar){
//do something with the passed variable $getvar
}