Php 在这种情况下,如何避免重复调用函数?

Php 在这种情况下,如何避免重复调用函数?,php,Php,我编写了一个函数,在每个wordpress帖子上显示一个对象: function pod(){ global $post,$pod; $id = get_the_ID(); $pod = new WP_POD( $id ); return $pod; } 我认为$pod是全球性的,所以,我可以在需要时使用$pod->Stuff,但它不起作用。 因此,在每个需要在对象中使用Stuff的函数中,我必须添加一行: $pod = pod() 我认为反复调用此函数可能对性能没有好处。是否有一种方法可以

我编写了一个函数,在每个wordpress帖子上显示一个对象:

function pod(){
global $post,$pod;
$id = get_the_ID();
$pod = new WP_POD( $id );
return $pod;
}
我认为$pod是全球性的,所以,我可以在需要时使用$pod->Stuff,但它不起作用。 因此,在每个需要在对象中使用Stuff的函数中,我必须添加一行:

$pod = pod()

我认为反复调用此函数可能对性能没有好处。是否有一种方法可以使此变量成为全局变量并可由其他函数访问?

您需要在试图从中访问变量的函数中将$pod作为全局变量进行delcare。与大多数其他语言不同,除非在PHP中显式声明,否则无法全局访问变量

调用pod()一次

然后像这样进入

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

您只需将对象传递给正在调用的函数即可。
或者使用其他与

或者,如果这不能说服你;-),至少通过以下方式限制变量的可见性

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;
}
你想。如果您需要将数据拉入函数,这肯定表明您的设计已被破坏(Wordpress已被破坏)。使用$post和$pod并将其传递给函数(这也将防止):

然而,这仍然没有多大意义。您没有在函数中使用$post,为什么要传入它?取而代之的是,您再次从函数作用域中取出某种id,然后使用它实例化WP_POD实例并将其分配回全局作用域

为什么不直接做呢

function createPod($id)
{
    return new WP_POD($id);
}
然后用你的名字来称呼它

$pod = createPod(get_the_ID());
或者干脆把函数全部删除,然后

$pod = new WP_POD(get_the_ID());
是的,这不会将$pod实例分配给全局范围,但我怀疑您是否真的需要它


至于性能:您不应该担心性能,除非您分析了您的应用程序,发现它运行缓慢,并且特定的代码确实是它运行缓慢的原因。

非常感谢您的详细解释!我原以为全球化是一件方便的事情,但现在看来可能不是。我的网站没有慢下来,我只是觉得使用更少的代码很好,似乎没有必要:-)
$pod = new WP_POD(get_the_ID());