2011-08-09 57 views
0

我正在尝试制作一个用户定义的游戏地图列表。因为我不知道在设计时数组中有多少地图,我试图动态地创建新变量来包含它们。这甚至有可能吗?这里是我的失败尝试:PHP:这样的代码可能吗?

<?php 
$maplist=array("map1.aamap.xml","map2.aamap.xml"); //edit this list with your maps 
$rounds = 3;     //times to play each map 
/*======No need to edit below========*/ 
global $last; //store the last played map    
class Map 
{ 
    public $difficulty; 
    public $played; //amount of times played 
} 
foreach($maplist as $i => $element) 
{ 
    $element = $map[$i]; 
    $map[$i] = new Map(); 
} 
//snipped other code here 
$map[$i]->$played = $x++; //increment the times played counter <-- FAILS HERE 
?> 

解析器说:Fatal error: Cannot access empty property

是这样的以这种方式甚至可行吗?

+1

'$ map [$ i] - > $ playing = $ x ++;'出现循环且'$ i'不存在,因此错误 – Kumar

+0

@Kumar yes但这不是问题。编辑代码并用1替换$ i也会给出相同的错误 – dukevin

+1

@Kumar:编号'$ i'在全局范围内定义,所以它在循环后仍然存在,保持最后一个数组元素的键值(在这种情况下为'1')。 –

回答

2

有在你的代码中的一些错误:

<?php 
$maplist=array("map1.aamap.xml","map2.aamap.xml"); //edit this list with your maps 
$rounds = 3;     //times to play each map 
/*======No need to edit below========*/ 
global $last; //store the last played map    

既然你都在全球范围内这里,不是一个函数里面,有没有必要global

class Map 
{ 
    public $difficulty; 
    public $played; //amount of times played 
} 
foreach($maplist as $i => $element) 
{ 
    $element = $map[$i]; 

这里是否缺少一些代码?您在回路中没有使用$element,因此不需要此分配。

$map[$i] = new Map(); 
} 
//snipped other code here 
$map[$i]->$played = $x++; //increment the times played counter <-- FAILS HERE 

的语法来访问成员变量是$object->variable,不$object->$variable。后者将评估$variable并将该值用作变量名称(例如,如果$variable = "foo",则将尝试访问$object->foo)。

改为使用$map[$i]->played = $x++;

+0

哇。我现在感觉很蠢,谢谢! – dukevin

+0

我也觉得很愚蠢,但我真的没有看到我在全球范围定义的$,foreach结束后的$ foreach可用吗?我仍然感觉像一个愚蠢的 – Kumar

+0

@kumar欢迎来到俱乐部;) – dukevin

2

访问某个类的属性时,您不希望在属性名称本身前面使用$

$map[$i]->$played = $x++;替换为$map[$i]->played = $x++;来解决Fatal error: Cannot access empty property错误。

+0

是的,我刚刚意识到这一点。 *尴尬* – dukevin

0

当访问实例的属性时,您不必使用$。简单使用$ map [$ i] - >玩过。看看OOP basics