![](/img/trans.png)
[英]PHP Function Arguments: Array of Objects of a Specific Class
[英]Collection of objects of an specific class in PHP
我想有一個數組/類似對象的集合,其中元素是特定類的對象(或從中派生出來的)。 在Java中,我會做類似以下的事情:
private List<FooClass> FooClassBag = new ArrayList<FooClass>();
我知道這可以並且將緊密地耦合我的應用程序的一些組件,但我一直想知道如何以適當的方式做到這一點。
我能想到的唯一方法是創建一個實現Countable
, IteratorAggregate
, ArrayAccess
...的類,並強制添加一個類的元素,但這是最好的方法嗎?
這是一個可能的實現,但我不會使用這樣的結構。
<?php
class TypedList implements \ArrayAccess, \IteratorAggregate {
private $type;
private $container = array();
public function __construct($type) {
$this->type = $type;
}
public function offsetExists($offset) {
return isset($this->container[$offset]);
}
public function offsetUnset($offset) {
unset($this->container[$offset]);
}
public function offsetGet($offset) {
return $this->container[$offset];
}
public function offsetSet($offset, $value) {
if (!is_a($value, $this->type)) {
throw new \UnexpectedValueException();
}
if (is_null($offset)) {
$this->container[] = $value;
} else {
$this->container[$offset] = $value;
}
}
public function getIterator() {
return new \ArrayIterator($this->container);
}
}
class MyClass {
private $value;
public function __construct($value) {
$this->value = $value;
}
public function __toString() {
return $this->value;
}
}
class MySubClass extends MyClass {}
$class_list = new TypedList('MyClass');
$class_list[] = new MyClass('foo');
$class_list[] = new MySubClass('bar');
try {
$class_list[] = 'baz';
} catch (\UnexpectedValueException $e) {
}
foreach ($class_list as $value) {
echo $value . PHP_EOL;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.