我写了一个函数来在每个wordpress帖子上显示一个对象:
function pod(){
global $post,$pod;
$id = get_the_ID();
$pod = new WP_POD( $id );
return $pod;
}
我认为$pod是全局的,所以,我可以在需要的时候使用$pod->东西,但它不起作用。因此,在每个函数中,我需要使用对象中的东西,我必须添加一行:
$pod = pod()
我认为反复调用这个函数可能对性能不好。是否有一种方法使此全局和可访问的其他功能?
您要避免使用global
关键字。如果你需要把数据拉到一个函数中,这肯定是你的设计出问题的标志(Wordpress也出问题了)。使用依赖注入并将$post和$pod传递给函数(这也可以防止远距离的怪异动作):
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实例分配到全局作用域,但我怀疑你是否真的需要它。
至于性能:你不应该担心性能,除非你已经分析了你的应用程序并发现它运行缓慢,并且特定的代码确实是导致它变慢的原因。
您可以简单地将对象传递给您正在调用的函数。
或者使用与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
您需要在您试图从中访问变量的函数中将$pod声明为全局。变量不能全局访问,除非在PHP中显式声明,这与大多数其他语言不同。
调用pod()一次
然后像这样访问
global $pod;
$pod->stuffs ....
你可以使用$GLOBALS在脚本中声明变量:
$pod = new WP_POD( get_the_ID() );
function myFunc() {
$GLOBALS['pod']->aMethod;
}