【问题标题】:Limiting a global variable access to my php file only仅限制对我的 php 文件的全局变量访问
【发布时间】:2012-01-27 16:24:33
【问题描述】:

如何在函数外部创建一个变量,但它在我的 php 文件之外不可见?

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

【问题讨论】:

  • 请允许我提出一个愚蠢的问题:为什么不将它作为参数传递给您的函数呢?这样你就解决了两个问题..
  • 我想要一个常量变量供许多函数使用。但它只用于我的模块,不应该打扰其他的代码。实际上我正在研究 Drupal。
  • PHP 没有文件范围之类的东西。

标签: php


【解决方案1】:

我希望许多函数都使用一个常量变量。但它只用于我的模块,不应该打扰其他的代码。实际上我正在研究 Drupal。

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

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

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

【讨论】:

    【解决方案2】:

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

    只需创建一个将您需要的值作为“全局”返回的函数,并在需要时调用该函数。既然你说你希望这个变量只能在一个 php 文件中访问,只需将这个定义函数放在那里:

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

    【讨论】:

      【解决方案3】:

      你可以使用匿名函数:

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

      【讨论】:

      • 根据 OP 的问题,这不在函数之外,而是在函数内部。
      • 在 PHP 中隐藏变量只有两种方法。命名空间和匿名函数。
      • 但我想在我的文件中的多个函数中使用 $local_global。它会起作用吗?
      • $x 将在全局范围内。
      • @user774250:没有。然后改用命名空间。但是你坚持要求 php 5.3
      【解决方案4】:

      使用 PHP5.2 及以下,你根本做不到。一旦它是全球性的,它就是全球性的。

      但从 5.3 开始,有了 Namespacing,它允许不同级别的范围。

      请看这里:http://www.ibm.com/developerworks/opensource/library/os-php-5.3new3/index.html

      【讨论】:

      • 我的文件中的全局变量是否可以在不包括我的php文件的情况下在其他文件中访问,而只需使用我的变量的全局声明?
      • 答案在某种程度上具有误导性。命名空间不允许限制变量范围,而是只处理某物的名​​称。
      • @user774250:全局变量可以(永远)在任何地方(全局)访问。
      • 啊-该死的,是的,回复者是对的。更多信息在这里:stackoverflow.com/questions/5287315/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多