![](/img/trans.png)
[英]What happens if the same object instance is attached multiple times to SplObjectStorage?
[英]what happens in syntax of splobjectstorage?
以下是來自php.net的splobjectstorage文檔的example2。 使用$ s [$ o1]和$ s [$ o2]的行是我不熟悉的語法,還沒有看過對象(仍在學習)
這是從一個對象獲取屬性的標准方法,該對象可以用於我創建的任何類嗎?
這是使用魔術方法還是其他編程功能來為這個類創建這種語法?
<?php
// As a map from objects to data
$s = new SplObjectStorage();
$o1 = new StdClass;
$o2 = new StdClass;
$o3 = new StdClass;
$s[$o1] = "data for object 1";
$s[$o2] = array(1,2,3);
if (isset($s[$o2])) {
var_dump($s[$o2]);
}
?>
“方括號” [ ]
語法是使用SplObjectStorage
作為數據映射的示例。 意味着,作為一個關鍵 - key->value store
。
SplObjectStorage中元素( $o1
, $o2
)的“鍵”實際上是對象的哈希值。 它使得無法將相同對象實例的多個副本添加到SplObjectStorage,因此您無需在添加之前檢查副本是否已存在。
$o1
, $o2
可以是您創建的任何自定義PHP類。 SplObjectStorage將負責數據映射。
通常,這種“方括號”語法不與PHP中的對象一起使用。 它僅用於數組。
使用對象時,請使用$object->property
或$object->function()
語法。
禮貌:
您可以對數組和實現ArrayAccess
接口的所有類( SplObjectStorage
使用的)使用方括號語法。
例:
class MyObjectStorage implements ArrayAccess {
public function offsetExists($offset) {}
public function offsetSet($offset, $value) {
echo "Set $offset to $value.";
}
public function offsetGet($offset) {
echo "Get $offset.";
}
public function offsetUnset($offset) {}
}
$list = new MyObjectStorage();
$list['foo'] = 'bar'; // prints "Set foo to bar.";
有關更多信息,請參見http://php.net/ArrayAccess 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.