Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 替换变量位于替换变量的内部_Php_Function_Variables_Global Variables_Anonymous Function - Fatal编程技术网

Php 替换变量位于替换变量的内部

Php 替换变量位于替换变量的内部,php,function,variables,global-variables,anonymous-function,Php,Function,Variables,Global Variables,Anonymous Function,我有一个函数,它检查用户语言并将其写在变量中。过了一段时间,我产生了合并它们的想法,这样我就需要在第一次使用变量之前随时调用函数,所以我在var内部调用函数,我会自己替换它。但它不起作用,因为它试图给我一个“闭包对象”,我认为它是一个函数,而不是结果:(这是代码的重要部分: $GLOBALS['user_language'] = function() { return get_user_language(); } function get_user_language() { $

我有一个函数,它检查用户语言并将其写在变量中。过了一段时间,我产生了合并它们的想法,这样我就需要在第一次使用变量之前随时调用函数,所以我在var内部调用函数,我会自己替换它。但它不起作用,因为它试图给我一个“闭包对象”,我认为它是一个函数,而不是结果:(这是代码的重要部分:

$GLOBALS['user_language'] = function()
{
    return get_user_language();
}

function get_user_language()
{
    $user_language = 'en';
    $GLOBALS['user_language'] = $user_language;
    return $user_language;
}

//somewhere in the script
print_r($GLOBALS['user_language']);
我只想把
'en'
拿出来

function get_user_language()
{
    $user_language = 'en';
    $GLOBALS['user_language'] = $user_language;
    return $user_language;
}

$GLOBALS['user_language'] = get_user_language();


//somewhere in the script
print_r($GLOBALS['user_language']);
但这很奇怪,因为您已经在
get\u user\u language()
中设置了它,然后再次拉它。它几乎会创建一个循环。正确的方法可能是从函数中删除
$GLOBALS['user\u language']=$user\u language;

希望这能回答您的问题。

只需使用
print\r(get\u user\u language())
而不是
print\r($GLOBALS['user\u language');

如果多次获取用户的语言会特别慢(例如,数据库查询会一次又一次地执行),可以执行以下操作:

function get_user_language()
{
    static $user_language = null;
    if ($user_language === null) {
        $user_language = 'en'; // this would be where you make the DB query
    }
    return $user_language;
}

实际上,在大型PHP应用程序中,此代码通常位于中,并将值存储为对象属性,因此,例如,应用程序可以缓存多个用户的DB查询结果,而不仅仅是当前用户的查询结果。

此代码没有任何意义。您对要执行的操作的描述不太清楚也可以是描述性的。你不能从变量中调用函数。为什么你不粘贴整个脚本,而不是试图粉饰一个没有任何意义的伪版本?如果错误在这里,你还需要什么?你还需要200行代码做什么,才能知道我如何设置
$user\u language
变量?它不是问题的关键是。@Dmi7ry@BASILIO,whitemiths_样式可以,但制表符需要更改为空格-制表符不显示correctly@Dmi7ry你能做一个标签显示不正确的屏幕截图吗?我在Debian下使用Opera,没有发现任何问题:OThank你非常感谢,这正是我所需要的。运行它,你就会明白了叮叮我,我为什么这么做;)妈的,我太早了,不能从快乐的终点起舞。这不是我想要的。我需要调用
get\u user\u language()
只有我调用
$GLOBALS['user\u language']
并且您的示例在脚本运行时随时执行“只需使用print\r(get\u user\u language())”这是我希望避免的。当我忘了在开始时把它放在哪里时,我花了很多时间来寻找错误。我希望能成功autonomous@BASILIO:是否将所有出现的
$user\u language
替换为
get\u user\u language()
真的不是一个选项?PHP确实为对象提供了一个“神奇的getter”特性,但对全局变量没有。