2014-06-18 32 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天前