【问题标题】:PHP: how to access variables inside a function that have been declared outside of it?PHP:如何访问已在其外部声明的函数内部的变量?
【发布时间】:2012-07-07 08:31:13
【问题描述】:

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

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

问题是函数1将被多次声明时发生错误...

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

那么,什么是更优雅和更干净的解决方案呢?怎么解决?

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

【问题讨论】:

    标签: php function include visibility


    【解决方案1】:

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

    首先:function2.php 的内容......是一个函数吗?如果不是,那么该文件应该与脚本中包含它的位置具有相同的范围,并且它应该能够正常访问它们。

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

    0。重新包含文件

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

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

    • 优点:简单灵活。
    • 缺点:调用函数有点痛苦。您可以通过将它们全部放入单个参数数组中来简化这一点,而不是单独传递每个参数。

    2。使用global

    在函数2的开头,只需添加命令global $var1, $var2 ...即可导入脚本中其他地方使用的任何变量。

    这也很简单,但是许多程序员认为使用全局变量是草率的,并且会使您在其他地方遇到难以调试的错误。

    3.使用常量

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

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

    【讨论】:

    • 哇,谢谢奥克腾!这是一个很棒的解释!感谢您提供出色且解释清楚的见解! :)
    【解决方案2】:

    尝试include_once 而不是include

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

    编辑: 完整示例

    ma​​in.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

    【讨论】:

    • 已经尝试过,正如另一篇 SO 帖子中所建议的那样,它不起作用......但是谢谢!
    • 你是否在所有地方都使用了 include_once?
    • 好吧,两次...一次用于包含 function1.php 的 session.php,然后 function2.php 包含 session.php(因此再次包含 function1.php...)
    • include_once() 防止包含文件被第二次包含。这解决了函数被重新声明等问题,但它并没有解决能够从 function2.php 中访问这些值的问题。
    • @octern:那么,是否有可能从 function2.php 中访问这些值?
    【解决方案3】:

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

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

    function1($variable1);
    

    然后在函数中检索它

    function function1($getvar){
        //do something with the passed variable $getvar
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 2015-12-12
      • 2015-11-09
      相关资源
      最近更新 更多