我正在尝试使用用户定义的游戏地图列表。因为我不知道在设计时数组中有多少个映射,所以我试图动态创建新变量来包含它们。这甚至可能吗?这是我失败的尝试:
<?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
?>
Parser说:Fatal error: Cannot access empty property
以这种方式这样的事情是否可行?
答案 0 :(得分:2)
访问类的属性时,您不希望在属性名称前面使用$
。
将$map[$i]->$played = $x++;
替换为$map[$i]->played = $x++;
以解决Fatal error: Cannot access empty property
错误。
答案 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++;
。
答案 2 :(得分:0)
如果您愿意,可以覆盖魔术方法以提供动态属性:
public function __get($name)
{
...
}
public function __set($name, $value)
{
...
}
http://www.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.members
在每个函数中,您可以将数据存储在某个内部数组结构中。
答案 3 :(得分:0)
访问实例的属性时,您不必使用$。简单使用$ map [$ i] - &gt;播放。看看OOP basics。