比如我有一个类,类名是A(这个类本身不是实现单例模式的,看后面实例化这个类的方式):
class A(){
public $str = '这是属性';
public $str2 = '属性';
private $str3 = '私有属性';
public function __construct($a,$b,$c){
//构造方法
}
public function func1(){
//类的方法
}
public function func2(){
//类的方法
}
}
还有一个全局函数:
function getObj(){
require PATH.'a.class.php';//引入上面定义的class A的文件
static $instance;//定义静态变量
if($instance){
return $instance;
}
$instance = new A('1','2','3');
return $instance;
}
然后我要在其他地方调用类A的实例,并且可能需要一次请求调用多次,通过getObj方法来得到这个类的实例,因为是返回的静态变量,其实在第一次创建这个类的实例后,后面调用都是直接用的这个静态变量的实例,并没有重新new一个新的实例,这种方式算不算单例模式??如果不算,主要是哪里不同会有什么隐患??十分感谢!
接下去就要是PHP7的时代了,你的代码还停留在看上去像是5.x早期时代的PHP代码,本身代码应该可以跑通,你的使用方式从宽泛的定义上来讲,勉强可以算单例,但是整体感觉非常奇怪。并且如别的回答提出的,如果别人不知道getObj函数的话,很有可能就自己new了,你的获取对象的函数无法对别人起到约束作用
既然你的构造函数依赖三个参数,这是我对于这份代码的建议实现
PS 另外建议题主去了解一下PSR规范和autoload