是否可以将实例化对象用作数组键?
例如:
$product = new Product("cat");
if(isset($sales[$product])){
$sales[$product]++;
}
else{
$sales[$product] = 1;
}
例如:
$product = new Product("cat");
if(isset($sales[$product])){
$sales[$product]++;
}
else{
$sales[$product] = 1;
}
从文档中:
数组和对象不能用作键。这样做将导致警告:偏移类型非法。
您可以为每个实例指定一个唯一的ID或覆盖__toString(),
以便它返回唯一的东西并执行例如
$array[(string) $instance] = 42;
您可以使用 http://www.php.net/manual/en/class.splobjectstorage.php
$product = new Product("cat");
$sales = new SplObjectStorage();
if(isset($sales[$product])){
$sales[$product]++;
}
else{
$sales[$product] = 1;
}
它不是一个真正的数组,但具有相当数量的类似数组的功能和语法。但是,由于它是一个对象,由于其奇怪的前置行为,并且与所有本机php数组函数不兼容,因此它的行为就像php中的不合适。有时你会发现通过
$arr = iterator_to_array($sales);
因此,它与代码库的其余部分配合得很好。