2

在每一页的开头,我都包含一个启动 SESSION 等的文件,让我们称之为session.php。在这个文件session.php中,我包含了一个包含函数的文件,我们称之为它function1.php,因为我需要该函数在session.php.

但是,稍后在主页中我还包含function2.php了哪些需要访问设置在中的变量session.php,所以我另外尝试包含session.phpfunction2.php.

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

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

那么,什么是更优雅和更干净(er)的解决方案呢?你怎么能解决它?

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

4

3 回答 3

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)您可以坚持使用简单的数字或字符串值。常量不能是数组、对象等。

于 2012-07-06T21:26:02.813 回答
2

尝试include_once代替include

http://php.net/manual/en/function.include-once.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调用自:session.php

函数1调用自:function2.php

于 2012-07-06T21:14:07.350 回答
0

首先确保您没有对将包含的文件中的函数使用相同的名称。

之后,您可以简单地将有问题的变量作为函数的参数传递

function1($variable1);

然后在函数中检索它

function function1($getvar){
    //do something with the passed variable $getvar
}
于 2012-07-06T21:30:21.977 回答