我正在尝试创建一个可以实例化一次的类。
$ins1,$ins4,$ins3
以这样一种方式创建:如果已经定义了静态变量$ instance,它将一次又一次地返回。
$ins1==$ins4 returns true
实例$ins4,$ins5
是使用new
关键字创建的。当我使用时
$ins4==$ins5
它也返回真相。如何确定仅创建一个实例
<?php
class Singleton{
private static $instance;
public static function getInstance(){
if(!self::$instance){
echo " I AM THE FIRST INSTANCE and i am not from bypass<br>";
self::$instance = new Singleton();
return self::$instance;
}else{
echo "i am from bypass<br>";
return self::$instance;
}
}
}
$ins1 = Singleton::getInstance();
$ins2 = Singleton::getInstance();
echo $ins1==$ins2;
echo '<br>';
$ins3 = Singleton::getInstance();
$ins4 = new Singleton();
$ins5 = new Singleton();
echo $ins4 == $ins5;
?>
您需要制作构造函数protected
或private
,否则任何人都可以调用它:
class Singleton {
protected __construct() {}
public static getInstance() {
...
}
}
话虽如此,强制这样的单例很少是一个好主意。更好的主意是只实例化该类一次,然后根据需要通过依赖注入将其传递给它。管理实例化和传递的依赖项注入容器在这里很有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句