例如,假設我有一個Car對象,並且我希望我的數組僅包含Cars。是否有一些語法允許我這樣做?有什麼方法可以在PHP中爲我指定一個數組只包含某些類型的對象?
0
A
回答
4
編號PHP沒有任何強類型。
我可以考慮強制執行此操作的唯一方法是讓CarArray類具有getter,setter等等。強制參數成爲Car類的函數。
+0
好想法。 SPL中有一個[ArrayObject](http://www.php.net/manual/en/arrayobject.construct.php)類可能有幫助 –
2
開箱即用,但是您可以在Car
類上實現ArrayObject,並覆蓋ArrayObject的append方法以僅接受例如CarPart
的實例。這樣你就有一個對象,它的行爲就像一個數組,只要你添加附加條目,它只會接受CarPart
類型的條目。
0
你可以像下面這樣實現一個基本的列表類,並且只允許使用代碼中的addItem
函數將項添加到列表中。你可以在它周圍添加很多功能。然後使用標準php數組功能對$list->items
陣列執行任何陣列特定的操作。
class list()
{
function __construct($type)
{
$this->type = $type;
$this->items = array();
}
public function addItem($item)
{
if(get_class($item) == $type)
{
$this->items[] = $item;
}
else
{
return false;
}
}
}
0
只是包裝任何你想要的車在內含typehinted API:
class Cars implements IteratorAggregate
{
protected $storage;
public function __construct(SplObjectStorage $storage)
{
$this->storage = $storage;
}
public function addCar(Car $car)
{
$this->storage->attach($car);
}
public function removeCar(Car $car)
{
$this->storage->detach($car);
}
public function getIterator()
{
return clone $this->storage;
}
// …
}
無論您使用SplObjectStorage
或ArrayObject
或$storage
普通array
是你。這是包裝,正在照顧,只有Cars
進入它。
Full working example on codepad
如果你喜歡使用數組表示法,例如方括號,執行ArrayAccess
。
class Cars implements IteratorAggregate, ArrayAccess
{
// …
public function offsetSet($offset, $value)
{
if($value instanceof Car) {
$this->storage[$offset] = $value;
} else {
throw …
}
}
}
0
下面是使用陣列濾器以除去不屬於汽車的任何對象的簡單解決方案。
// Return TRUE to keep the value, FALSE otherwise
function car_filter($val) {
return ($val instanceof Car);
}
$cars = array(...); // an array of cars
// Apply the filter
$cars = array_filter($cars, "car_filter")
相關問題
- 1. 我可以爲某些對象定義類方法嗎?
- 2. 在斯卡拉,我可以(一些SIP允許我)只指定一般類型的某些類型參數嗎?
- 3. 只包含某種類型的對象的數組
- 4. 表示一個數組在某些索引中包含某些類型?
- 5. 創建一個只包含給定類的對象的數組
- 6. 有什麼方法可用於某些類型的對象#<Text>
- 7. Array_udiff對象數組,使數組包含對象,只有一個特定方法的實例存在
- 8. PHP:確保數組僅包含某個類的對象
- 9. 有什麼方法可以跟蹤仍然指向某個對象的東西?
- 10. 有什麼方法可以知道對象的類型?
- 11. 什麼是我可以訪問這個PHP數組的一些替代方法?
- 12. 我可以指定一個類實例可以轉換爲某種類型嗎?
- 13. PHP包含,但只有某些東西
- 14. 有什麼方法可以指定鍵盤類型?
- 15. 測試數組以包含具有某個鍵的對象:值
- 16. 我可以只包含一個類的特定成員方法嗎?
- 17. 爲什麼在編組後,只有一個數組元素包含一個值?
- 18. 爲什麼我的方法未定義類型對象?
- 19. 爲什麼有些方法在頁面對象中不可用?
- 20. 傳遞一個可包含對象,其中包含一個Parcelable對象數組
- 21. 爲什麼數組中的對象沒有對象方法?
- 22. 爲什麼方法表只包含基類的虛方法?
- 23. 有什麼方法可以在PHP中讀取字符類型?
- 24. 我們可以只爲某些數據類型定義模板函數嗎?
- 25. 爲什麼這個對象可以訪問父類的方法?
- 26. 我不能定義一個包含對象類型值的數組?
- 27. 在C++中,我可以有一個只有在某些條件下才具有某些功能的類嗎?
- 28. 使PHP只包含在某些URL上?
- 29. 我剛寫了一個n維數組對象的這個類。有什麼方法可以改進它嗎?
- 30. 是否可以將某個對象設置爲只讀方法
與正常的數組不同。也許通過擴展['ArrayObject'](http://www.php.net/manual/en/arrayobject.construct.php)雖然 –