如何避免在这种情况下反复调用函数?
我写了一个函数,在每个WordPress邮寄显示对象:如何避免在这种情况下反复调用函数?
function pod(){
global $post,$pod;
$id = get_the_ID();
$pod = new WP_POD($id);
return $pod;
}
我以为$荚是全球性的,所以,我可以用$料盒>东西的时候需要,但是它不工作。 所以,在每一个我需要的对象才能使用的东西的功能,我必须添加一行:
$pod = pod()
我想重复调用该函数可能不适用于性能自动不错。有没有办法让这个全局和其他功能可访问?
您想要t avoid the global
keyword。如果您需要将数据提供给某个功能,那么肯定会显示您的设计已损坏(并且Wordpress已损坏)。使用Dependency Injection并通过在$岗位和$吊舱的功能(这也将防止spooky action at a distance):
function pod($post, $pod)
{
$id = get_the_ID();
$pod = new WP_POD($id);
return $pod;
}
然而,仍然犯规多大意义。你没有在函数中使用$ post,那么为什么要传递它呢?相反,您可以再次从函数范围中获取某种标识。然后使用它来实例化WP_POD实例并将其分配回全局范围。
为什么不只是做
function createPod($id)
{
return new WP_POD($id);
}
,然后用
$pod = createPod(get_the_ID());
调用或直接删除的功能完全,只是做
$pod = new WP_POD(get_the_ID());
是的,这不会指定$荚实例到全球范围,但我怀疑你真的需要它在那里。
至于性能:除非您对应用程序进行了描述,并且发现它运行缓慢,并且该特定代码确实是其速度缓慢的原因,否则不应该担心性能。
您需要delcare $ pod作为您尝试访问该变量的函数的全局函数。变量不能全局访问,除非在大多数其他语言中用PHP明确声明。
呼叫POD()一次
那么像这样访问
global $pod;
$pod->stuffs ....
你可以简单地将对象传递给你打电话的功能。
或者用别的相关http://en.wikipedia.org/wiki/Dependency_injection
或者,如果不说服你;-),至少通过一些限制变量的公开程度就像
function pod($init=false) {
global $post,$pod;
static $pod=null;
if (is_null($pod) || $init) {
$id = get_the_ID();
$pod = new WP_POD($id);
}
return $pod;
}
您可以使用$ GLOBALS在您的脚本中声明该变量:
$pod = new WP_POD(get_the_ID());
function myFunc() {
$GLOBALS['pod']->aMethod;
}
非常感谢您的详细解释!我认为全球化是一件令人满意的事情,现在我认为它可能不是。在我的网站上没有减速,我只是觉得使用更少的代码很不错,似乎不是必须的:-) – Jenny