我有一个for-loop从Haxe到php的翻译问题。循环跟踪我的数组“步骤”的内容。在Haxe它工作正常。Haxe/php Array.length
HAXE代码:
private var _steps:Array<Step> = new Array<Step>();
public function initFrontendData(steps:Array<Step>) {
_steps = steps;
for (i in 0..._steps.length) {
var step:Step = _steps[i];
trace("Step: "+ step.id + ", Name: " + step.name + "<br />");
}
}
但是,如果我用翻译的PHP代码中,我得到的错误: 未捕获的异常:试图让非对象的属性(错误:8),路径\ KONF \ Konfigurator第#28行的.class.php试图获取非对象的属性。
第28行是$ _g = $ this - > _ steps-> length;
生成的PHP代码:
public $_steps;
public function initFrontendData($steps) {
$this->_steps = $steps;
{
$_g1 = 0;
$_g = $this->_steps->length;
while($_g1 < $_g) {
$i = $_g1++;
$step = $this->_steps[$i];
haxe_Log::trace("Schritt " . _hx_string_rec($step->id, "") . ", " . _hx_string_or_null($step->name) . "<br />", _hx_anonymous(array("fileName" => "Konfigurator.hx", "lineNumber" => 76, "className" => "konf.Konfigurator", "methodName" => "initFrontendData")));
unset($step,$i);
}
}
}
如果我手动更改行28:
$_g = $this->_steps->length;
到
$_g = count($this->_steps);
一切工作正常。但我不想手动更改生成的PHP代码,我认为它不是希望Haxe手动更改生成的代码。
我在我的Haxe代码中有错误,或者Haxe的PHP翻译是否是Bug?如何在不更改生成的php代码的情况下解决问题?
THX Pockie
那么什么类型是$步骤?如果它的数组(如我所料),那么PHP代码需要修改。 – Steve
是$ steps是一个数组。就像我提到的,我不想手动更改生成的PHP代码。我必须在Haxe编写我的项目,然后Haxe将代码编译为php。但生成的PHP代码是叛逃。我知道在哪里可以找到并解决php中的错误。但是我没有发现Haxe中的错误,以及Haxe为什么会生成有缺陷的PHP代码。 – Pockie
你确定你的源数组是Haxe生成的数组而不是原生的PHP数组吗?如果它是本机版本,则需要使用php.Lib.toHaxeArray(native) 进行包装,请参阅http://api.haxe.org/php/Lib.html#toHaxeArray –