Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么要同时使用实例化和静态方法?_Php_Wordpress_Plugins - Fatal编程技术网

Php 为什么要同时使用实例化和静态方法?

Php 为什么要同时使用实例化和静态方法?,php,wordpress,plugins,Php,Wordpress,Plugins,以下代码来自一个名为“特色评论”的wordpress插件。它是由一位备受尊敬的开发人员编写的,所以我知道代码是100%正确的 public static function instance() { if ( ! isset( self::$instance ) ) { self::$instance = new Featured_Comments; self::$instance->includes();

以下代码来自一个名为“特色评论”的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;
    }
开发人员使用静态方法公共静态函数实例{然后自己实例化::$instance=new Featured_Comments;为什么?我是oop新手,认为静态方法不需要实例化?请有人解释一下


完整的wordpress插件可以在wordpress存储库中找到,称为“特色评论”。谢谢!

正如其他人提到的那样-开发人员似乎遵循了设计模式

$instance属性是静态的,以确保它始终是唯一的实例。如果您查看属性声明,您会注意到它被声明为private,这将阻止您从当前类之外更改值

实例方法是静态的,因此您不必实例化此类来访问实例方法。否则,您必须执行以下操作:

$classInstance = new YourClass();
$instance = $classInstance->instance();
但是使用static关键字只是

$instance = YourClass::instance();
在您的例子中,类似乎为插件运行准备了一些资产

    self::$instance->includes();
    self::$instance->init();
    self::$instance->load_textdomain();

FeturedComments实例返回的return self::$instance;似乎是完成所有繁重任务的实例,而且它必须只实例化一次以避免混乱。

看起来像一个Hi,我知道单例模式确保类只能实例化一次。然而,为什么开发人员要实例化静态method?谢谢!否则在一个非静态类中就不会有实例。这就是可怕的singleton的意思,所以singleton类只需要使用static$instance实例化一次这个类?我以前读过的所有php网站都说不要实例化静态,因为这是不必要的?singleton听起来很矛盾静态方法实例实例化了Featured_Comments类的一个新实例,并在静态属性$instance中设置该实例……然后,对静态实例方法的所有后续调用都将返回该单个实例