【问题标题】:Can global variables be created with the keyword global and through a superglobal variable within a function in PHP?可以使用关键字 global 并通过 PHP 函数中的超全局变量创建全局变量吗?
【发布时间】:2020-05-10 03:33:05
【问题描述】:

我听说使用全局变量不好,但是我只是想了解 PHP 语言是如何工作的。我是编码界的初学者。

为什么可以在函数中创建全局变量?无论是通过使用 global 关键字还是通过超全局变量。我认为这两个动作用于访问函数中的全局变量。我认为创建全局变量的唯一方法是在外部函数创建它;在全局范围。我查看了许多不同的网站,包括 w3schools.comphp.net

这只是我创建的一些简单代码,旨在尝试了解全局变量与函数的工作方式:

<?php

function sample1() {
    global $a;
    echo $a = "this ";
}

sample1();

function sample2() {
    echo $GLOBALS['$b'] = "is ";
}

sample2();

function sample3() {
    global $c;
    $c = "an ";
}

sample3();
echo $c;

function sample4() {
    $GLOBALS['$d'] = "example ";
}

sample4();
echo $GLOBALS['$d'];

?>

这是代码的结果:

这是一个例子

所有代码都有效,但我不明白我是如何在这些代码块中创建全局变量的?全局变量不是在函数外部创建的。如何在函数内部创建它们?我错过了什么?任何回复表示赞赏 - 如果可能,请保持答案简单 - 我想在评论部分进一步讨论这个问题,因为我确信我会有后续问题 - 谢谢

【问题讨论】:

    标签: php function global-variables superglobals global-scope


    【解决方案1】:

    变量可以通过你刚才做的两种方式在全局范围内创建 - 没有什么说函数不能在全局范围内创建(或更改)变量 - 当你通过 $GLOBALS 明确要求它时或global 关键字。

    问题在于您的信念“我认为创建全局变量的唯一方法是在函数之外创建它;在全局范围内。”不是一个确切的说法。当您使用$GLOBALSglobal 时,您指的是全局范围。您在函数内部引入了对全局范围的引用。

    global 实际上是将本地引用链接到全局引用,而$GLOBALS 是显式引用全局范围(在 PHP 内部可以以相同的方式将其引入本地范围)。

    在这种情况下,您明确表示“我希望此变量在全局范围内可用,请实现!” PHP 会按照您的要求执行。这种行为因语言而异,但正如您在 PHP 中发现的那样,这是允许的。

    我不建议以任何方式使用它 - 它使您的代码很难遵循和争论,所以把它当作一个深奥的细节。

    【讨论】:

    • 非常感谢您快速彻底的回复!我为我的评论延迟道歉,但是,我想试着理解你在说什么——我想我现在有点理解了——所以当你在 PHP 中使用引用时,两个变量的值都变为全局并引用相同的价值?如果它是一个引用,那么为什么两个变量在两个范围内都具有相同的名称?该网站 (elated.com/php-references) 说:引用只是一种使用不同名称引用变量内容的方法。再次感谢你!! :D
    • 没有什么可以“变成全局的”,但是局部变量——即你在函数内部使用的,是对全局变量的引用——实际上;它们使用两个不同的名称是同一件事(即使在本地范围和全局范围内的词法名称相同,它们实际上也是不同的——一个是本地的,一个是全局的——“符号”可以是调用始终是本地的,但它与全局符号/变量引用相同的数据。实际上,它是具有两个不同名称的相同数据(变量)。
    • 非常感谢您帮我解决这个问题!!我非常感谢您付出的时间和您提供的知识!! :D :D
    猜你喜欢
    • 2022-06-22
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2016-10-25
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多