Aktualna wersja PHP nie obsługuje wbudowanego podpowiedzi typu dla tablicy obiektów, ponieważ nie istnieje taki typ danych jak "tablica obiektów". Nazwa klasy może być interpretowana jako typ w określonych kontekstach, a także jako array
, ale nie obie naraz.
Właściwie można wdrożyć tego rodzaju ścisłego typu podpowiadania tworząc klasę opartą na ArrayAccess
interfejsu, np
class Item {
protected $value;
public function __construct($value) {
$this->value = $value;
}
}
class ItemsArray implements ArrayAccess {
private $items = [];
public function offsetSet($offset, $value) {
if (! $value instanceof Item)
throw new Exception('value must be an instance of Item');
if (is_null($offset)) {
$this->container[] = $value;
} else {
$this->container[$offset] = $value;
}
}
public function offsetExists($offset) {
return isset($this->container[$offset]);
}
public function offsetUnset($offset) {
unset($this->container[$offset]);
}
public function offsetGet($offset) {
return isset($this->container[$offset]) ? $this->container[$offset] : null;
}
}
function getItems() : ItemsArray {
$items = new ItemsArray();
$items[0] = new Item(0);
$items[1] = new Item(2);
return $items;
}
var_dump((array)getItems());
Output
array(2) {
["ItemsArrayitems"]=>
array(0) {
}
["container"]=>
array(2) {
[0]=>
object(Item)#2 (1) {
["value":protected]=>
int(0)
}
[1]=>
object(Item)#3 (1) {
["value":protected]=>
int(2)
}
}
}
Jestem jedną z osób, które są bardzo dobre w ekstrapolacji danych z krótkich tekstów lub przykładów. Ale nie rozumiem, co próbujesz osiągnąć. Czy możesz wyjaśnić pytanie? –
@Hallur: Wręcz przeciwnie, myślę, że plakat jest bardzo wyraźny, chce zadeklarować, że funkcja zwraca tablicę przedmiotu, szkoda, że nie da się tego zrobić w PHP. – Johnny