为什么这一起使用实例化和静态方法?

时间:2015-10-15 16:37:13

标签: php wordpress plugins

以下代码来自一个名为“精选评论”的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存储库中找到,称为“精选评论”。谢谢!

1 个答案:

答案 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;)似乎是完成所有繁重工作的实例 - 并且它必须仅实例化一次以避免混乱。