PHP Global与Javascript Global

时间:2015-12-10 20:26:43

标签: php joomla global-variables

当我学习javascript时,书籍或技术文章作者强调了全局变量问题,a.k.a应该总是试图避免使用全局变量。我认为其中一个原因是避免命名冲突。我认为无论我们使用何种语言,命名冲突始终都是一个问题。

但是,当我阅读PHP书籍时,没有特别提及使用全局变量或将其标记为不良做法。我应该注意它吗?

例如,我正在尝试修改Joomla中的一些PHP文件。如果我在模块的模板文件中编写自定义函数getJson(),我怎么知道其他组件没有在某处使用函数名?

2 个答案:

答案 0 :(得分:1)

你的第一个问题是关于函数名称的第二个变量。

使用全局变量是不好的实践?

是的,如果您使用了太多变量并且丢失了有关使用情况的概述! 想想一个有20个编码器的编码器团队在一个拥有1000多个文件的大项目上。

不,如果你使用全局变量。 像大多数框架一样。

主题:OOP或不是OOP(面向对象编程)

  

我应该注意它吗?

在你的情况下,使用Joomla,你应该看看Joomla如何使用全局变量。并以这种方式使用它们。

在其他项目中,为他们提供自定义用法,例如:仅适用于类实例的全局变量。

关于你如何编码,更多OOP或更多PROCEDUAL或所有混合.... php是一个开放的大世界。

  

我怎么知道其他人没有在某个地方使用该功能名称   组件?   function_exists( '的getJSON'); ;)

无论如何,对于这个问题,php有名称空间。

namespace MySpace {
 function getJson(){}
}
use MySpace\getJson as getJson;

getJson($args);

你应该阅读一下它。

  

如果我在模板文件中编写自定义函数getJson()

您可以使用匿名函数:

$getJson = function(){};

而不是创建全局函数。 如果该功能仅用于此模板!

希望有所帮助。

答案 1 :(得分:0)

调查对您的情况至关重要。

  1. 确保在开发环境中设置error_reporting(E_ALL);

  2. 在创建函数之前,对function getJson(

  3. 的某些组合运行所有PHP文件的递归搜索

    我对Joomla并不熟悉但是如果使用namespacing那么你可能会遇到误报。

    1. 如果正在使用命名空间,请确保不要通过引用第一个点 - error_reporting(E_ALL);

    2. 来遇到命名空间冲突
    3. 使用像boss这样的命名空间(需要PHP 5.3.0或更高版本):

    4. namespace NameSpaceThatIsDefinitelyNotUsedanywhereksdgbdihjfgbdfbgd{
          function getJson(){}
      }
      use NameSpaceThatIsDefinitelyNotUsedanywhereksdgbdihjfgbdfbgd\getJson as getJson;
      
      getJson($args);
      

      #2的说明

      1. 选择目录
      2. 仅限搜索到PHP文件
      3. 告诉您要搜索function getJson(
      4. 点击“全部查找”
      5. enter image description here