0

我开始学习 php 并使用迷宫生成器来测试我的知识。每个顶点都是二维数组 ($gridlist[$x][$y]) 中 Grid 类的成员

每个方向(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 上不起作用?

非常感谢

H T

(xampp 1.7.3 上的 php 5.3.1,用 IE8 测试)

4

1 回答 1

0

$gridlist是在函数外部声明的变量,因此无法从函数内部访问。您可以通过以下两种方式之一解决此问题:

1)使用(邪恶)global关键字:

global $gridlist;    
$c = $gridlist[$a][$b]; 

2)将其作为参数传递给您的方法(首选方法)

function connect_twoV2($gridlist, $a, $b, $d){
于 2012-05-09T14:08:48.513 回答