我正在将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)
答案 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() />