为什么不鼓励全局$ object_name?

Boj*_*les 3 php class

我有两个课程,目前我通过使用它来引用另一个课程:

ClassB::func()
{
    global $classAObject;
    echo $classAObject->whatever();
}

但是,我被告知global不鼓励使用.是吗,为什么?

Eri*_*rik 7

有很多理由不使用全局变量.这里只是几个:

  1. 范围
    • 在大型系统中,如果重用半常用名称,则很容易意外地重新分配全局变量
    • 全局范围中的变量会增加脚本内存占用量.并不总是很重要,但可以
    • 在其他一些语言中,没有必要获取全局变量 - 默认情况下它们是可用的 - 如果您忘记将同名变量声明为本地变量,这可能会导致错误
  2. 耦合
    • 在良好的软件设计中,组件应松散耦合.全局变量意味着紧密耦合.
  3. 保养
    • 任何地方的任何其他代码都可以更改全局变量.特别是在大型系统中,这可以使调试现有代码或添加新代码成为噩梦.

处理您在帖子中给出的示例的更好方法是传递包含所需数据的对象.

classB::func($obj) 
{
   echo $obj->whatever();
}

$obj = new classAObject;
classB::func($obj);
Run Code Online (Sandbox Code Playgroud)