PHP:这样的代码可能吗?

时间:2011-08-09 06:24:52

标签: php class

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

<?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

以这种方式这样的事情是否可行?

4 个答案:

答案 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