PHP 在构建对象时与 new 一起使用的 static 关键字
PHP static keyword used with new in building an object
我正在阅读有关 OOP 中的模式的内容,并遇到了单例模式的代码:
class Singleton
{
/**
* @var Singleton reference to singleton instance
*/
private static $instance;
/**
* gets the instance via lazy initialization (created on first usage)
*
* @return self
*/
public static function getInstance()
{
if (null === static::$instance) {
static::$instance = new static;
}
return static::$instance;
}
/**
* is not allowed to call from outside: private!
*
*/
private function __construct()
{
}
/**
* prevent the instance from being cloned
*
* @return void
*/
private function __clone()
{
}
/**
* prevent from being unserialized
*
* @return void
*/
private function __wakeup()
{
}
}
有问题的部分是static::$instance = new static;
。 new static
究竟做了什么,或者这个例子是如何工作的。我熟悉你的平均值 new Object
但不熟悉 new static
。任何对 php 文档的引用都会有很大帮助。
基本上这是一个可扩展的 class,每当您调用 getInstance()
时,您将得到一个您调用它的任何 class 的单例(扩展此单例 class).如果您只在一个实例中使用它,您可以硬编码 class 名称,或者如果您在 class.
中硬编码它,则使用 new self
此外,单例被视为反模式,有关此模式的更多详细信息,请参阅她的回答why-is-singleton-considered-an-anti-pattern
我正在阅读有关 OOP 中的模式的内容,并遇到了单例模式的代码:
class Singleton
{
/**
* @var Singleton reference to singleton instance
*/
private static $instance;
/**
* gets the instance via lazy initialization (created on first usage)
*
* @return self
*/
public static function getInstance()
{
if (null === static::$instance) {
static::$instance = new static;
}
return static::$instance;
}
/**
* is not allowed to call from outside: private!
*
*/
private function __construct()
{
}
/**
* prevent the instance from being cloned
*
* @return void
*/
private function __clone()
{
}
/**
* prevent from being unserialized
*
* @return void
*/
private function __wakeup()
{
}
}
有问题的部分是static::$instance = new static;
。 new static
究竟做了什么,或者这个例子是如何工作的。我熟悉你的平均值 new Object
但不熟悉 new static
。任何对 php 文档的引用都会有很大帮助。
基本上这是一个可扩展的 class,每当您调用 getInstance()
时,您将得到一个您调用它的任何 class 的单例(扩展此单例 class).如果您只在一个实例中使用它,您可以硬编码 class 名称,或者如果您在 class.
new self
此外,单例被视为反模式,有关此模式的更多详细信息,请参阅她的回答why-is-singleton-considered-an-anti-pattern