2012-05-09 3 views
0

저는 PHP를 배우기 시작하고 있으며, 지식을 테스트하기 위해 미로 생성기를 사용하고 있습니다. 각 정점은 2D 배열에서 Grid 클래스의 멤버입니다. ($ gridlist [$ x] [$ y])(php) 클래스 함수를 호출하는 함수에 클래스 멤버를 전달합니다.

각 방향 (NSEW)과 'visited'에 대한 클래스 변수가 있습니다. 생성자는 모든 변수를 0으로 설정합니다. $ gridlist [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"); 

: 치명적인 오류 :이 호출이 포함 이는 MEM에 전화 ber 함수 set_connect() non-object on C : \ XAMPP \ xampplite \ htdocs \ phptest \ zMaze3.php on line 170

누구나 내게 클래스 함수 호출이 $ c에서 작동하지 않는다고 말할 수 있습니까?

많은 감사

HT

(IE8로 테스트 XAMPP 1.7.3에 PHP 5.3.1)

+2

당신의 메서드에 매개 변수로 전달과 같은 두 가지 방법이 하나 해결할 수 있습니다 당신이 방금 시작한 것처럼 변수에 의미있는 이름을 부여하는 습관을 가지십시오. 그렇게하면 우리 (그리고 우리)의 삶이 훨씬 쉬워 질 것입니다. – vascowhite

답변

0

$gridlist은 함수의 외부에서 선언 된 변수 및 그 내부에서 액세스 할 수 없습니다 그것의.

1) (악을 사용) global 키워드 :

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

2) (기본 방법)

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

우수, 고마워요 - 매개 변수로 배열을 전달하려고합니다. 배열이 큰 경우 매번 통과하면 속도에 영향을 줍니까? – horsethorn

+0

참조로 전달 된 경우 no입니다 (전체 배열이 아니라 배열에 대한 포인터를 전달합니다). 참조로 전달할 변수 이름 앞에 & (앰퍼샌드)를 추가하십시오. 다른 것을 변경할 필요가 없습니다. IE : connect_twoV2 (& $ gridlist, $ a, $ b, $ d) – Tushar

+0

John, 고마워 - 지금 큰 일 :-) – horsethorn

관련 문제