(php)将类成员传递给调用类函数的函数

时间:2012-05-09 14:06:08

标签: php xampp

我开始学习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进行测试)

1 个答案:

答案 0 :(得分:0)

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

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

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

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

function connect_twoV2($gridlist, $a, $b, $d){