PHP выстраивают со значением по умолчанию для несуществующих индексов

Можно попробовать библиотеку Boost Tokenizer, в особенности Оставленный Разделитель элементов списка

9
задан Yu Hao 9 July 2015 в 10:42
поделиться

3 ответа

$da->setDefault(1);

Вы также можете использовать волшебную функцию __construct:

class DefaultArray extends ArrayObject
{
    public function __construct($value = null){
        if(is_null($value))
        {
            $this->value = 'default';
        } else {
            $this->value = $value;
        }
    }
}
6
ответ дан 4 December 2019 в 23:40
поделиться

Почему так сложно?

function initVal($value) {
    global $myarr;
    if(!isset($myarr['value']))
        $myarr['value'] = new MyObj();
}

Теперь вам просто нужно позвонить:

initVal('bla');
$myarr['bla']->bla = 'bla';

Но, как я вижу, ваш гораздо аккуратнее.

-3
ответ дан 4 December 2019 в 23:40
поделиться

Попробуйте магические методы ​​ __ get .

class DefaultArray extends ArrayObject {
    protected $_defaultValue;

    public function setDefault($defaultValue) {
        $this->_defaultValue  = $defaultValue;
    }

    public function __get($index) {
        return $this->offsetGet($index);
    }

    public function offsetGet($index) {
        if(!parent::offsetExists($index)) {
            if (is_object($this->_defaultValue)) {
                $default = clone $this->_defaultValue;
            } else {
                $default = $this->_defaultValue;
            }
            parent::offsetSet($index, $default);
        }
        return parent::offsetGet($index);
    }
}

Теперь вам просто нужно использовать разные ключи, так как доступ для чтения инициализирует эти элементы массива:

$da = new DefaultArray();
assert($da['foo'] == null);
$da->setDefault(1);
assert($da['bar'] == 1);
3
ответ дан 4 December 2019 в 23:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: