簡體   English   中英

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

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

“方括號” [ ]語法是使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM