我开始学习php并使用迷宫生成器来测试我的知识。每个顶点都是2D数组中Grid类的成员($ gridlist [$ x] [$ y])
每个方向(NSEW)和“已访问”都有一个类变量。构造函数将所有变量设置为0.我在类中包含了一个函数来设置顶点之间的连接,因此调用$ gridlist [2] [2] - > set_connect(“N”)会将Nconnect变量设置为1
要将两个点连接在一起,需要设置连接的每一侧,所以我写了一个函数(不在类中)来执行此操作:
function connect_twoV2($a, $b, $d){
$c = $gridlist[$a][$b];
switch ($d){
case "N":
$c->set_connect("N");
$e = $gridlist[$a][$b-1];
$e->set_connect("S");
break;
case "S":
$c->set_connect("S");
$e = $gridlist[$a][$b+1];
$e->set_connect("N");
break;
case "E":
$c->set_connect("E"); ///This is line 170
$e = $gridlist[$a+1][$b];
$e->set_connect("W");
break;
case "W":
$c->set_connect("W");
$e = $gridlist[$a-1][$b];
$e->set_connect("E");
break;
}
}
但是,当我运行包含此调用的文件时:
connect_twoV2(1, 2, "E");
我得到: 致命错误:在第170行的C:\ XAMPP \ xampplite \ htdocs \ phptest \ zMaze3.php中的非对象上调用成员函数set_connect()
有谁可以告诉我为什么类函数调用对$ c不起作用?
非常感谢
HT
(关于xampp 1.7.3的php 5.3.1,使用IE8进行测试)
答案 0 :(得分:0)
$gridlist
是在函数外部声明的变量,因此无法从其内部访问。您可以通过以下两种方式之一解决这个问题:
1)使用(邪恶的)global
关键字:
global $gridlist;
$c = $gridlist[$a][$b];
2)将其作为参数传递给您的方法(首选方法)
function connect_twoV2($gridlist, $a, $b, $d){