2011-08-04 143 views
1

我写了一个函数,在每个WordPress邮寄显示对象:如何避免在这种情况下反复调用函数?

function pod(){ 
global $post,$pod; 
$id = get_the_ID(); 
$pod = new WP_POD($id); 
return $pod; 
} 

我以为$荚是全球性的,所以,我可以用$料盒>东西的时候需要,但是它不工作。 所以,在每一个我需要的对象才能使用的东西的功能,我必须添加一行:

$pod = pod() 

我想重复调用该函数可能不适用于性能自动不错。有没有办法让这个全局和其他功能可访问?

回答

1

您想要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()); 

是的,这不会指定$荚实例到全球范围,但我怀疑你真的需要它在那里。

至于性能:除非您对应用程序进行了描述,并且发现它运行缓慢,并且该特定代码确实是其速度缓慢的原因,否则不应该担心性能。

+0

非常感谢您的详细解释!我认为全球化是一件令人满意的事情,现在我认为它可能不是。在我的网站上没有减速,我只是觉得使用更少的代码很不错,似乎不是必须的:-) – Jenny

0

您需要delcare $ pod作为您尝试访问该变量的函数的全局函数。变量不能全局访问,除非在大多数其他语言中用PHP明确声明。

呼叫POD()一次

那么像这样访问

global $pod; 
$pod->stuffs .... 
0

您可以使用$ GLOBALS在您的脚本中声明该变量:

$pod = new WP_POD(get_the_ID()); 

function myFunc() { 
    $GLOBALS['pod']->aMethod; 
} 
相关问题