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

时间:2012-07-06 21:11:47

标签: php function include visibility

在每个页面的最开始,我都包含一个启动SESSION等的文件,我们称之为session.php。在此文件session.php中,我包含一个包含函数的文件,我们称之为function1.php,因为我需要在session.php中使用该函数。

但是,稍后在主页面中,我还包含function2.php,需要访问session.php中设置的变量,因此我还尝试将session.php包含在function2.php中。< / p>

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

  

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

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

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

3 个答案:

答案 0 :(得分:5)

这不是公共变量和私有变量的问题,因为您希望来自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)您可以坚持使用简单的数字或字符串值。常量不能是数组,对象等。

答案 1 :(得分:2)

尝试include_once而不是include

http://php.net/manual/en/function.include-once.php

编辑: 完整的例子

<强> main.php

<?php
include_once 'session.php';
include 'function2.php';

<强> session.php文件

<?php
include_once 'function1.php';
function1('session.php');

<强> function1.php

<?php
function function1($calledFrom)
{
    echo 'function1 called from: ' . $calledFrom . PHP_EOL;
}

<强> function2.php

include_once 'function1.php';
function1('function2.php');

将这些全部放在同一个文件夹中并运行

php main.php

输出结果为:

  

function1来自:session.php

     

function1来自:function2.php

答案 2 :(得分:0)

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

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

的参数传递
function1($variable1);

然后在函数

中检索它
function function1($getvar){
    //do something with the passed variable $getvar
}