将php中引用的数组转换为coldfusion

时间:2012-02-03 04:12:51

标签: php coldfusion

我正在将Liquid从PHP移植到Coldfusion。我遇到了一些问题,因为你可以通过引用传递数组,在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 )都是数组。在 LiquidTagIf 类中声明 _nodelistHolders _blocks 时,会在名为的父类中声明 _nodelist LiquidTag (继承链是LiquidTagIf - > LiquidDecisionBlock - > LiquidBlock - > LiquidTag)

1 个答案:

答案 0 :(得分:3)

像往常一样,对于大多数问题,Ben Nadel已经在博客上写了答案:/

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

基本上,ColdFusion数组实际上是基于Java对象“java.util.List”。要通过引用传递数组,您需要将它们创建为“java.util.ArrayList”。它们仍然可以像你期望的那样使用所有数组函数(比如ArrayAppend),但是当你将它们传递给函数时,它将通过引用来实现。

<cfset arr = CreateObject(
"java",
"java.util.ArrayList"
).Init() />