假设我想要一组对象,每个对象都应该有自己的唯一 ID。不需要什么花哨的东西,只需要一个字母表示它是哪种类型的对象,一个数字表示已经创建了多少个对象。例如,a0、a1、b0、c0、c1、c2、c3 等等。
我不想设置全局变量来跟踪每个对象有多少已经存在,我想用一个类来做。像这样:
class uniqueIDGenerator
{
private $numberAObjs;
private $numberBObjs;
private $numberCObjs;
public function generateID ($type) {
if($type === "A") {
return 'a' . (int) $this->$numberAObjs++;
} else if($type === "B") {
return 'b' . (int) $this->$numberBObjs++;
} else if($type === "C") {
return 'c' . (int) $this->$numberCObjs++;
}
}
}
class obj
{
private $id;
function __construct($type) {
$this->id = uniqueIDGenerator::generateID($type);
}
}
这样做的问题是,如果 uniqueIDGenerator 未实例化,它的 generateID 函数将始终为每种类型(例如 a0、b0、c0 等)返回相同的值,因为它的私有变量实际上并未在内存中创建。同时,让它成为 obj 的属性是行不通的,因为每次创建一个 obj 时,它都会有自己的 uniqueIDGenerator 实例,所以它也总是返回 a0, b0, c0,(假设它只被调用一次在该对象的方法中)等等。
唯一的选择似乎是让 uniqueIDGenerator 成为自己的全局实例,以便 obj 的构造函数可以引用它,但这似乎是糟糕的编码实践。是否有任何好的 OOP 方法可以使所有对象保持分离和组织?