我有一個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 –