当我学习javascript时,书籍或技术文章作者强调了全局变量问题,a.k.a应该总是试图避免使用全局变量。我认为其中一个原因是避免命名冲突。我认为无论我们使用何种语言,命名冲突始终都是一个问题。
但是,当我阅读PHP书籍时,没有特别提及使用全局变量或将其标记为不良做法。我应该注意它吗?
例如,我正在尝试修改Joomla中的一些PHP文件。如果我在模块的模板文件中编写自定义函数getJson()
,我怎么知道其他组件没有在某处使用函数名?
答案 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)
调查对您的情况至关重要。
确保在开发环境中设置error_reporting(E_ALL);
。
在创建函数之前,对function getJson(
我对Joomla并不熟悉但是如果使用namespacing那么你可能会遇到误报。
如果正在使用命名空间,请确保不要通过引用第一个点 - error_reporting(E_ALL);
使用像boss这样的命名空间(需要PHP 5.3.0或更高版本):
namespace NameSpaceThatIsDefinitelyNotUsedanywhereksdgbdihjfgbdfbgd{ function getJson(){} } use NameSpaceThatIsDefinitelyNotUsedanywhereksdgbdihjfgbdfbgd\getJson as getJson; getJson($args);
#2的说明