2013-01-21 41 views
1

下面是例題從php.net的splobjectstorage文檔。 使用$ s [$ o1]和$ s [$ o2]的行是語法我不熟悉並且還沒有看到過的對象(仍在學習)splobjectstorage的語法會發生什麼?

這是一種從屬性獲取屬性的標準方法一個可以與我創建的任何類一起工作的對象?

這是不是用魔術方法或額外的編程功能來創建這個語法只是這個班?

<?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]); 
} 
?> 

http://php.net/manual/en/class.splobjectstorage.php

回答

1

您可以使用數組實現了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

2

的 「コ」 [ ]語法是使用SplObjectStorage作爲數據映射的一個例子。意思是,作爲key->value store

SplObjectStorage中元素的「鍵」($o1,$o2)實際上是對象的散列。這使得它不可能將同一對象實例的多個副本添加到SplObjectStorage中,因此在添加之前不必檢查副本是否已存在。

$o1$o2可以是您創建的任何自定義的PHP類。 SplObjectStorage會照顧數據映射。

通常,這種「方括號」語法不與在PHP對象使用。它僅用於數組。

雖然使用對象,使用$object->property$object->function()語法。

禮貌:

+1

嗨@Moylin請讓我知道,如果這有助於。 – OMG