• <rp id="gzxyh"><listing id="gzxyh"></listing></rp>
    <kbd id="gzxyh"></kbd>

    <b id="gzxyh"><legend id="gzxyh"><b id="gzxyh"></b></legend></b>
    <source id="gzxyh"></source>
    <u id="gzxyh"></u>
    1. PHP8 WeakMap 類

      2023-08-21 17:26 更新

      (PHP 8)

      簡介

      WeakMap 是將對象作為 key 來訪問的 map(或者說字典)。然而,與其它類似 SplObjectStorage 不同,WeakMap 中的對象 key 不影響對象的引用計數。也就是說,如果在任何時候對其唯一的剩余引用是 WeakMap key,那么該對象將會被垃圾收集并從 WeakMap 移除。它的主要用法是從對象中編譯數據派生緩存,這種場景下不需要存活得比對象更久。

      WeakMap 實現了 ArrayAccess、 Iterator、Countable, 因此大多數情況下,它能和關聯數組一樣使用。

      類摘要

      final class WeakMap implements ArrayAccess, Countable, IteratorAggregate {
      /* 方法 */
      public count(): int
      public getIterator(): Iterator
      public offsetExists(object $object): bool
      public offsetGet(object $object): mixed
      public offsetSet(object $object, mixed $value): void
      public offsetUnset(object $object): void
      }

      示例

      示例 #1 Weakmap 用法示例

      <?php
      $wm = new WeakMap();
      
      $o = new stdClass;
      
      class A {
      public function __destruct() {
      echo "Dead!\n";
      }
      }
      
      $wm[$o] = new A;
      
      var_dump(count($wm));
      echo "Unsetting...\n";
      unset($o);
      echo "Done\n";
      var_dump(count($wm));

      以上示例會輸出:

      int(1)
      Unsetting...
      Dead!
      Done
      int(0)
      

      目錄

      • WeakMap::count — 統計 map 中存活實體的數量
      • WeakMap::getIterator — 接收一個外部迭代器
      • WeakMap::offsetExists — 檢測 map 中是否存在某個對象
      • WeakMap::offsetGet — 返回某個對象指向的值
      • WeakMap::offsetSet — 更新 map 新的鍵值對
      • WeakMap::offsetUnset — 從 map 中移除一條


      以上內容是否對您有幫助:
      在線筆記
      App下載
      App下載

      掃描二維碼

      下載編程獅App

      公眾號
      微信公眾號

      編程獅公眾號