【问题标题】:SplObjectStorage and sugary syntax in PHPPHP 中的 SplObjectStorage 和含糖语法
【发布时间】:2012-01-08 13:21:14
【问题描述】:

快速的;我怀疑这是可能的,但有没有办法利用 PHP 的 array($key => $value); 语法来处理 SplObjectStorage 对象?

我的意思是,有没有这样的方法可以实现:

$store = // ?
    new KeyObject() => new ValueObject(),
    new KeyObject() => new ValueObject(),
    // ...

在初始化对象存储的上下文中?目前我只是在使用:(并且可能会继续,考虑到这种可能性的绝对可能性

$store = new SplObjectStorage();
$store[new KeyObject()] = new ValueObject();
$store[new KeyObject()] = new ValueObject();
// ...

会很好,高度怀疑它,但也许有人知道更好。

【问题讨论】:

    标签: php object spl key-value-store


    【解决方案1】:

    虽然这将是一个更简洁的语法,但不幸的是这是不可能的。您能做的最好的事情是:

    $store[new KeyObject()] = new ValueObject();
    

    $store->append( new KeyObject(), new ValueObject());
    

    SplObjectStorage 添加对象时。

    【讨论】:

    • 谢谢@nickb - 我想了很多;虽然在意料之中,但仍然很不幸。
    【解决方案2】:

    为什么不这样做:

    $store = new SplObjectStorage();
    
    $data = array(
        array(new KeyObject, new ValueObject),
        array(new KeyObject, new ValueObject),
        array(new KeyObject, new ValueObject),
    );
    
    foreach($data as $item) {
        list($key, $value) = $item;
        $store->attach($key, $value);
    }
    

    它不漂亮,但至少简洁。

    【讨论】:

    • 谢谢@vstm - 我明白你的意思,但如果我建议的语法不可用,我想我会坚持使用$store[$obj] = $obj; 语法。像这样嵌套数组,虽然在语法上“更接近”我所追求的,但需要迭代,或者array_map()-ing 将其展平。
    • array() 语法在 5.4 中会稍微简洁一些,使用数组支持的短方括号语法。
    猜你喜欢
    • 1970-01-01
    • 2014-01-03
    • 2013-05-01
    • 2013-01-04
    • 1970-01-01
    • 2011-08-02
    • 2013-07-05
    • 2011-04-21
    • 1970-01-01
    相关资源
    最近更新 更多