时间:2011-08-04 09:52:58

标签: php

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

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

我认为$ pod是全局的,所以,我可以在需要时使用$ pod->东西,但它不起作用。 所以,在每个函数中我需要使用对象中的东西,我必须添加一行:

$pod = pod()

我认为反复调用此函数可能不利于性能。有没有办法让这个全局化和其他功能可访问?

4 个答案:

答案 0 :(得分:1)

您可以简单地将对象传递给您正在调用的函数 或者使用与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;
}

请参阅http://docs.php.net/language.oop5.static

答案 1 :(得分:1)

你想要avoid the global keyword。如果您需要将数据提取到某个函数,它肯定表明您的设计已损坏(并且Wordpress已损坏)。使用Dependency Injection并将$ post和$ pod传递给该函数(这也会阻止spooky action at a distance):

function pod($post, $pod)
{
    $id = get_the_ID();
    $pod = new WP_POD( $id );
    return $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实例分配到全局范围,但我怀疑你确实需要它在那里。

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

答案 2 :(得分:0)

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

调用pod()一次

然后像这样访问

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

答案 3 :(得分:0)

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

$pod = new WP_POD( get_the_ID() );

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