一旦你说你是第一次使用OOP,我想说:停止使用&
之前$this
: PHP4早就去世了。
第二个提示,如果可以的话,不要使用全局变量。我知道这个函数wp_get_current_user
在内部使用全局变量,但我希望将来不会再这样了,不过我看不到global
代码中的单词,让我填充得更好一些。
第三个小贴士,尝试使用类型暗示使你的plguin更加坚实。
在这里,我发布了我是如何编写该代码的。
首先,我写了两个类,可能在两个不同的文件中,以相同的类命名:
class WP_PM_User extends WP_User {
function getID() {
return $this->ID;
}
}
class WP_PM {
protected $user;
function __construct ( WP_PM_User $user = NULL) {
if ( ! is_null( $user ) && $user->exists() ) $this->user = $user;
}
function getUser() {
return $this->user;
}
}
之后,在插件的某个地方(可能在主插件文件中),我会编写如下两个函数:
function getWPPM() {
if ( ! did_action(\'wp_loaded\') ) {
$msg = \'Please call getCurrentUser after wp_loaded is fired.\';
return new WP_Error( \'to_early_for_user\', $msg );
}
static $wp_pm = NULL;
if ( is_null( $wp_pm ) ) {
$wp_pm = new WP_PM( new WP_PM_User( get_current_user_id() ) );
}
return $wp_pm;
}
function getCurrentUser() {
$wppm = getWPPM();
if ( is_wp_error( $wppm ) ) return $wppm;
$user = $wppm->getUser();
if ( $user instanceof WP_PM_User ) return $user;
}
add_action( \'wp_loaded\', \'getCurrentUser\' );
这样,在插件中的任何地方都可以调用
getCurrentUser
并检索当前用户对象,如果需要ID,可以调用
getID()
在返回的用户上
getCurrentUser
.
用法示例:
add_action( \'wp_loaded\', function() {
$current_user = getCurrentUser();
if ( $current_user instanceof WP_PM_User ) {
echo \'Current user ID: \' . $current_user->getID();
} else {
echo \'No one logged in\';
}
}, 30 );