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


PHP: how to access variables inside a function that have been declared outside of it?

在每个页面的最开头,我包含一个启动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
}