Php 在这种情况下,如何避免重复调用函数?
我编写了一个函数,在每个wordpress帖子上显示一个对象: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() 我认为反复调用此函数可能对性能没有好处。是否有一种方法可以
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());