iddqdby/weak-array

弱引用数组。

v2.0.1 2016-03-21 13:46 UTC

This package is not auto-updated.

Last update: 2024-09-26 00:26:49 UTC


README

Build Status Latest Stable Version Total Downloads License

简短描述

WeakArray 是一个基于 WeakRef PHP 扩展(参见 https://pecl.php.net/package/Weakref)的弱引用数组。

它保存对象的弱引用,允许在没有其他引用的情况下进行垃圾回收。

如何安装

composer require iddqdby/weak-array

或下载存档,解压缩并包含文件 autoload.php

示例

基本用法

代码

$weak_array = new WeakArray\WeakArray();

$foo = new stdClass();
$bar = new stdClass();
$baz = new stdClass();

$weak_array['foo'] = $foo;
$weak_array['bar'] = $bar;
$weak_array['baz'] = $baz;

var_export($weak_array['foo']);
echo "\n";

var_export($weak_array['bar']);
echo "\n";

var_export($weak_array['baz']);
echo "\n";

echo "====\n";

unset($foo);
unset($bar);

var_export($weak_array['foo']);
echo "\n";

var_export($weak_array['bar']);
echo "\n";

var_export($weak_array['baz']);
echo "\n";

输出

stdClass::__set_state(array(
))
stdClass::__set_state(array(
))
stdClass::__set_state(array(
))
====
NULL
NULL
stdClass::__set_state(array(
))

事件

代码

class Observer implements \SplObserver {
    public function update(\SplSubject $event) {
        // $event instanceof WeakArray\Event;
        // see WeakArray\Event class to view all available methods and Event::* constants
        switch ($event->getType()) {
            case WeakArray\Event::OBJECT_SET:
                $event_str = 'set';
                break;
            case WeakArray\Event::OBJECT_UNSET:
                $event_str = 'unset';
                break;
            case WeakArray\Event::OBJECT_DESTRUCTED:
                $event_str = 'destructed';
                break;
        }
        printf("Object %s, key %s\n", $event_str, $event->getKey());
    }
}

$weak_array = new WeakArray\WeakArray();
$observer = new Observer();

$weak_array->attach($observer);

$foo = new stdClass();
$bar = new stdClass();
$baz = new stdClass();

$weak_array['foo'] = $foo;
$weak_array['bar'] = $bar;
$weak_array['baz'] = $baz;

unset($foo);

unset($weak_array['bar']);
unset($weak_array['baz']);

输出

Object set, key foo
Object set, key bar
Object set, key baz
Object destructed, key foo
Object unset, key bar
Object unset, key baz

请参阅 examples/test/ 目录中的工作示例。

要求

  • PHP: 5.5, 5.6, 7.0
  • WeakRef PHP 扩展:PHP 5.5 和 PHP 5.6 的 0.2.6,PHP 7.0 的 >=0.3

主页

https://iddqdby.github.io/weak-array/

版本控制

此项目遵循 语义版本控制原则。

许可证

此项目受 MIT 许可证的许可。请参阅 LICENSE