使用global会产生任何开销吗?

nic*_*ckf 2 php optimization

如果您对最终未使用的变量使用global关键字,是否会出现问题?相比:

function foo() {
    global $fu;
    global $bah;
    if (something()) {
        $fu->doSomething();
    } else {
        $bah->doSomething();
    }
}

function bar() {
    if (something()) {
        global $fu;
        $fu->doSomething();
    } else {
        global $bah;
        $bah->doSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

我非常清楚使用第二种方法会使维护此代码变得更加困难,并且通常首选将所有全局变量放在函数的开头,因此:忽略两个函数的可维护性和代码样式的差异,在开销方面,这两者有什么区别?

Mat*_*ley 8

如果存在,它将不会(人类)可测量,除非你真的称呼这个函数数百万次.即使它是具有该属性的递归函数,我仍然不会将您的第二种方法用于您已经提出的可维护性方面.

编辑:为了论证,我实际上去了这个基准测试,bar()结果比一百万次调用慢了0.1秒.这意味着性能明智,您仍然有理由使用更清洁的版本.