当前位置:  开发笔记 > 编程语言 > 正文

PHP在调用函数时保留范围

如何解决《PHP在调用函数时保留范围》经验,为你挑选了1个好方法。

我有一个函数,它包含一个基于传递给它的字符串的文件,即来自查询字符串的操作变量.我将其用于过滤目的等,因此人们不能包含他们不应该的文件,如果文件不存在,则加载默认文件.问题是当函数运行并包含文件范围时,由于include在函数内部运行而丢失.这成为一个问题,因为我使用全局配置文件,然后我为站点上的每个模块使用特定的配置文件.我现在这样做的方法是定义我希望能够用作全局的变量,然后将它们添加到过滤函数的顶部.

有没有更简单的方法来做到这一点,即通过在进行函数调用时保留范围还是有像PHP宏这样的东西?

编辑:使用extract($ _ GLOBALS)会更好吗?在我的函数调用内?

编辑2: 对于任何关心的人.我意识到我完全在想这个问题,而不是使用一个函数我应该只使用一个包,呃!这样我就可以保持我的范围并拥有我的蛋糕.



1> nickf..:

编辑:好的,我已经重新阅读了你的问题,我想我现在正在谈论你所说的:
你想要这样的事情:

// myInclude.php
$x = "abc";

// -----------------------
// myRegularFile.php

function doInclude() {
    include 'myInclude.php';
}
$x = "A default value";
doInclude();
echo $x;    // should be "abc", but actually prints "A default value"

如果您只更改了几个变量,并且事先知道将在include中定义哪些变量global,请在doInclude()函数中声明它们.

或者,如果每个包含都可以定义任意数量的变量,则可以将它们全部放入一个数组中:

// myInclude.php
$includedVars['x'] = "abc";
$includedVars['y'] = "def";

// ------------------
// myRegularFile.php
function doInclude() {
    global $includedVars;
    include 'myInclude.php';
    // perhaps filter out any "unexpected" variables here if you want
}

doInclude();
extract($includedVars);
echo $x;        // "abc"
echo $y;        // "def"

原始答案:

这种事情被称为"闭包",并在PHP 5.3中引入

http://steike.com/code/php-closures/

使用extract($ _ GLOBALS)会更好吗?在我的函数调用内?

亲爱的领主,没有.如果要从函数内部访问全局变量,只需使用global关键字.例如:

$x = "foo";
function wrong() {
    echo $x;
}
function right() {
    global $x;
    echo $x;
}

wrong();        // undefined variable $x
right();        // "foo"

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有