以下代码来自一个名为“精选评论”的wordpress插件。这是一个备受推崇的开发人员,所以我知道代码是100%好的。
public static function instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new Featured_Comments;
self::$instance->includes();
self::$instance->init();
self::$instance->load_textdomain();
do_action( 'featured_comments_loaded' );
}
return self::$instance;
}
开发人员使用静态方法public static function instance() {
然后实例化它self::$instance = new Featured_Comments;
为什么?我是oop的新手,并认为静态方法不需要实例化?请有人解释一下。
完整的wordpress插件可以在wordpress存储库中找到,称为“精选评论”。谢谢!
答案 0 :(得分:0)
正如其他人提到的那样 - 开发人员似乎遵循Singletone设计模式
$ instance属性是静态的,以确保它始终是唯一的实例。如果您查看属性声明 - 您会注意到它被声明为私有,这会阻止您更改当前类外部的值。
将instance()方法设为静态,因此您不必实例化此类以访问instance()方法。否则你必须这样做:
$classInstance = new YourClass();
$instance = $classInstance->instance();
但是使用static关键字只是
$instance = YourClass::instance();
在你的情况下 - 该类似乎为插件准备了一些资产。
self::$instance->includes();
self::$instance->init();
self::$instance->load_textdomain();
它返回的FeturedComments
的实例(return self::$instance;
)似乎是完成所有繁重工作的实例 - 并且它必须仅实例化一次以避免混乱。