仅限制全局变量对我的php文件的访问

仅限制全局变量对我的php文件的访问,php,Php,如何在函数外部创建变量,但在我的php文件外部不应可见 我指的是具有单个文件范围的全局变量。我不想在全局命名空间中添加函数名,这可能会在明天发生冲突。对于PHP5.2及以下版本,您根本无法这样做。一旦它是全球性的,它就是全球性的 但从5.3开始,就有了名称空间,它允许不同级别的范围 请参见此处:您可以使用匿名函数: <?php $x = function() { $local_global = "nyah can't access me from outside"; .

如何在函数外部创建变量,但在我的php文件外部不应可见


我指的是具有单个文件范围的全局变量。我不想在全局命名空间中添加函数名,这可能会在明天发生冲突。

对于PHP5.2及以下版本,您根本无法这样做。一旦它是全球性的,它就是全球性的

但从5.3开始,就有了名称空间,它允许不同级别的范围


请参见此处:

您可以使用匿名函数:

<?php 

$x = function() {
    $local_global = "nyah can't access me from outside";
    ... do your stuff ...
}

$x();

这可能是有史以来最不雅观的解决方案,但在大多数情况下,它可以工作,而无需将变量传递给每个函数,这是您不想做的事情

只需创建一个函数,将您需要的值返回为“全局”,并在需要时调用该函数。因为您说过希望仅在一个php文件中访问此变量,所以只需将此定义函数放在其中:

function faux_global()
{
  $faux_global_var = 'This is supposed to be global';
  return $faux_global_var;
}

我想要一个常量变量被许多函数使用。但它只用于我的模块,不应该打扰其他模块的代码。事实上我在做Drupal

我不太清楚Drupal模块的要求,但您描述的内容听起来像是受保护的常量或变量。由于受保护的常量不存在,唯一的选择是创建受保护的变量。只需将所有模块函数代码放入一个或多个类中,这些类可以访问受保护的成员变量,就可以了

class MyModule
{
    protected $variable;
    public function myFunction()
    {
        $this->$variable; # accessible only within MyModule functions.
    }
}

只要只使用一个类,私有变量也可以工作。

请允许我问一个愚蠢的问题:为什么不将它作为参数传递给函数?你将用这种方法解决两个问题。我想要一个常量变量被许多函数使用。但它只用于我的模块,不应该打扰其他模块的代码。实际上,我正在使用Drupal.PHP,它没有文件作用域。我的文件中的全局变量是否可以在其他文件中访问,而不包括我的PHP文件,只需使用我的变量的全局声明?答案有点误导。名称空间不允许限制变量的作用域,但只处理某个对象的名称。@user774250:全局变量可以在任何地方(全局)访问。啊-该死,是的,应答器是正确的。这里的进一步信息:根据OP的问题,这不是在函数外部,而是在函数内部。在PHP中隐藏变量的方法只有两种。名称空间和匿名函数。但我想在文件中的多个函数中使用$local\u global。它会工作吗?$x将在全局范围内。@user774250:否。那么改为使用名称空间。但是,您必须满足PHP5.3的要求