0

私はphpを学び始めており、迷路ジェネレーターを使用して知識をテストしています。各頂点は、2D 配列のクラス Grid のメンバーです ($gridlist[$x][$y])

各方向 (NSEW) と「訪問済み」のクラス変数があります。コンストラクターはすべての変数を 0 に設定します。頂点間のコネクタを設定する関数をクラスに含めたので、$gridlist[2][2]->set_connect("N") を呼び出すと Nconnect 変数が 1 に設定されます。

2 つのポイントを接続するには、接続の各側を設定する必要があるため、これを行う関数を (クラスではなく) 作成しました。

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 でのテスト)

4

1 に答える 1

0

$gridlistは関数の外部で宣言された変数であるため、関数の内部からはアクセスできません。これは、次の2つの方法のいずれかで解決できます。

1)(悪の)globalキーワードを使用します:

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

2)パラメータとしてメソッドに渡します(推奨されるメソッド)

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