2014-06-18 34 views
1

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

+0

那麼什麼類型是$步驟?如果它的數組(如我所料),那麼PHP代碼需要修改。 – Steve

+0

是$ steps是一個數組。就像我提到的,我不想手動更改生成的PHP代碼。我必須在Haxe編寫我的項目,然後Haxe將代碼編譯爲php。但生成的PHP代碼是叛逃。我知道在哪裏可以找到並解決php中的錯誤。但是我沒有發現Haxe中的錯誤,以及Haxe爲什麼會生成有缺陷的PHP代碼。 – Pockie

+2

你確定你的源數組是Haxe生成的數組而不是原生的PHP數組嗎?如果它是本機版本,則需要使用php.Lib.toHaxeArray(native) 進行包裝,請參閱http://api.haxe.org/php/Lib.html#toHaxeArray –

回答

0

佛朗哥Ponticelli回答我的問題的評論部分的問題。你確定你的源數組是Haxe生成的數組而不是原生的PHP數組?如果它是一個本地的,它需要使用php.Lib.toHaxeArray(本地)包裝請參閱api.haxe.org/php/Lib.html#toHaxeArray - 佛朗哥Ponticelli 2天前