перевести ссылочные массивы в php в coldfusion - PullRequest
0 голосов
/ 03 февраля 2012

Я в процессе переноса через Liquid с PHP на Coldfusion. У меня есть некоторые проблемы, так как в PHP вы можете передавать массивы по ссылке, где в ColdFusion вы не можете сделать это. Что мне интересно, если у кого-то есть опыт перевода PHP в ColdFusion, и он сталкивался с этой проблемой и каким решением он обошел ее.

В качестве примера моей проблемы рассмотрим следующее:

class LiquidTagIf extends LiquidDecisionBlock
{

    private $_nodelistHolders = array();

    private $_blocks = array();

    public function __construct($markup, &$tokens, &$file_system)
    {
        $this->_nodelist = &$this->_nodelistHolders[count($this->_blocks)];
        array_push($this->_blocks, array(
            'if', $markup, &$this->_nodelist
        ));
        parent::__construct($markup, $tokens, $file_system);
    }

строки, которые у меня возникают проблемы при переводе, это:

$this->_nodelist = &$this->_nodelistHolders[count($this->_blocks)];

и этот:

'if', $markup, &$this->_nodelist

Все три из этих переменных ( _nodelist , _nodelistHolders , _blocks ) являются массивами. * _nodelistHolders и _blocks объявлены в LiquidTagIf классе, _nodelist объявлены в родительском классе с именем LiquidTag (цепочка наследования - LiquidTagIf -> LiquidDecisionBlock -> LiquidBlock -> LiquidTag)

1 Ответ

3 голосов
/ 03 февраля 2012

Как обычно, для большинства задач Бен Надель уже опубликовал ответ в своем блоге: /

http://www.bennadel.com/blog/275-Passing-Arrays-By-Reference-In-ColdFusion-SWEEET-.htm

По сути, массив ColdFusion фактически основан на Java-объекте "java.util.Список".Чтобы передать массив по ссылке, вам нужно создать его как «java.util.ArrayList».Они по-прежнему будут работать так же, как и следовало ожидать со всеми функциями массива (например, ArrayAppend), но когда вы передадите их функции, это будет сделано по ссылке.

<cfset arr = CreateObject(
"java",
"java.util.ArrayList"
).Init() />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...