接下去就要是PHP7的时代了,你的代码还停留在看上去像是5.x早期时代的PHP代码,本身代码应该可以跑通,你的使用方式从宽泛的定义上来讲,勉强可以算单例,但是整体感觉非常奇怪。并且如别的回答提出的,如果别人不知道getObj函数的话,很有可能就自己new了,你的获取对象的函数无法对别人起到约束作用
既然你的构造函数依赖三个参数,这是我对于这份代码的建议实现
class A(){
public $str = '这是属性';
public $str2 = '属性';
private $str3 = '私有属性';
private static $pool = [];
public static function getInstance($a, $b, $c)
{
/**
* 这里假设一种情况是需要这三个参数这个对象才唯一
* 并且这三个参数都是可以转换为字符串类型的
*(也就是说不能是stream,array,或者没有__toString()实现的object)
*/
$key = implode('_', func_get_args());
if (!isset(self::$pool[$key])) {
/**
* 关于这里使用static关键字详情请看后期静态绑定
* http://php.net/manual/zh/language.oop5.late-static-bindings.php
* 如果你的PHP还在用5.3以前的版本,请使用
* self::$pool[$key] = new self($a, $b, $c);
*/
self::$pool[$key] = new static($a, $b, $c);
}
return self::$pool[$key];
}
protected function __construct($a, $b, $c)
{
//构造方法,没有使用private是考虑如果有子类继承的情况
}
public function func1()
{
//类的方法
}
public function func2()
{
//类的方法
}
}
PS 另外建议题主去了解一下PSR规范和autoload