2011-09-21 3 views
1

나는 사용자가 임의로 빙고 보드를 생성하는 간단한 게임을 개발 중이다. 게임을 초기화하면 (즉, index.php에서 '시작'을 클릭 한 후 1 라운드) 코드가 새 컨트롤러 (bingo_play.php)를 사용하여 시작됩니다. 이 컨트롤러는 표시되어있는 타일과 각 타일의 정보를 추적합니다.Codeigniter 함수 변수를 전역 적으로 사용할 수있게하려면 어떻게해야합니까?

여기에 코드입니다 :

$card['products'] = array(
    1 => 'hamburger', 
    2 => 'fries', 
    3 => 'soda', 
    4 => 'taco', 
    5 => 'bacon', 
    6 => 'onions', 
    // etc. 
); 

if ($card['card_number'] == 1) 
{ 
    $card['card_entries'] = array(
     'a1' => '2', 
     'b1' => '8', 
     'c1' => '11', 
     'a2' => '9', 
     'b2' => '14', 
     'c2' => '1', 
     'a3' => '16', 
     'b3' => '15', 
     'c3' => '23' 
    ); 
} 

내가 세션 데이터로를 할당 할 수도있을 것 같군요하지만이 최고의 이동 될 것 생각하지 않았다. Codeigniter를 처음 접했을 때 나는 정말로 확신하지 못했습니다. 그냥 일반적인 PHP 프로젝트에서, 난 아마 include() 함수를 실행합니다.

제 질문은 배열의 각 함수를 확인하고 할당하지 않고 여러 함수 호출을 통해 타일의 ID와 텍스트를 사용할 수있게하는 가장 좋은 방법은 무엇입니까?

+0

종속성 주입 컨테이너를 조사하십시오. – dqhendricks

답변

1

global 변수 및 $GLOBALS은 많은 문제를 일으킬 수 있으며, 그 중에서도 디버깅이 매우 어려울 수 있습니다. 그들은 그들의 사용법을 가지고 있지만 일단 모든 문제에이 방법으로 접근하기 시작하면 일이 어려워 유지가 어렵습니다. 내 질문은

, 타일 'ID와 여러 기능을 통해 사용할 수있는 텍스트 확인하고 는 각 기능의 배열을 할당 할 필요없이 전화를하는 가장 좋은 방법은 무엇입니까?

난 당신이 작업을하는지에 100 % 명확하지 않다 동안, 그리고 카드 데이터는 정적인지, 또는 사용자가 여러 카드 또는 업데이트 카드가 할 수있는 경우, 다음 팁이 도움이 될 수있는 경우 :

데이터가 변경되지 않으면 Config class을 사용하십시오. 설정 파일에 저장하고로드 한 다음 config_item() 또는 $this->config->item()으로 항목을 읽습니다.

정적 데이터보다 더 많은 정보가 있다면 "빙고 보드"와 관련된 모든 것을 처리 할 수있는 클래스/라이브러리를 만드는 것이 좋습니다. 아주 간단한 예 :

$this->bingo_board->get_card(); 

값은 요청의 기간 동안 설정됩니다, 당신은 같은 기능을 추가하여이를 확장 할 수 있습니다 :

class Bingo_Board { 

    private $card; 

    function get_card($id) 
    { 
     // Assign the values to the $card property if not set yet, 
     // getting the values from the database, a file, or wherever they are 
     // Randomize them, do whatever you want 
     if (empty($this->card)) 
     { 
      $this->card = array(/* your data here*/); 
     } 

     // Return the card 
     return $this->card; 
    } 
} 

는 그런 다음과 같이 카드에 액세스 할 수 있습니다 reset_card(), validate_card(), update_card() 등이있다. 많은 카드를 저장해야하는 경우 $card 속성에 배열을 사용하고 배열 색인별로 항목을 설정/가져옵니다.

그러나 데이터가 서로 다른 요청을 통해 유지되어야하고 데이터가 정적이 아니어야하는 경우 (예 : 요청이있을 때마다 업데이트 됨) session data을 사용하거나 데이터베이스에 저장해야합니다 다음 요청/페이지에서 검색하십시오. 카드 ID와 같이 가능한 한 작은 데이터 만 저장하면됩니다.

Codeigniter (및 PHP와 관련하여)는 여러 가지 방법으로 문제에 접근합니다. 결국에는 어떤 방법이든 가장 잘 작동하는 방법을 사용하십시오. 전역 변수는 임의의 데이터를 얻거나 설정할 수있는 편리한 게으른 방법이 될 수 있지만 사용하지 않으려면해야합니다.

+0

@ 루이스 : Codeigniter는 하나의 커다란 수퍼 객체로 실행되기 때문에 클래스가로드되는 한 어디서나 액세스 할 수 있으며 구성 항목은 항상 사용할 수 있습니다. 네가 여기서 무슨 뜻인지 모르겠다. 네가 내 downvote에 대해서 아이가되었다는 느낌을 받는다. –

+0

귀하의 대답은 단순히 질문에서 질문 한 내용을 다루지 않습니다. – Louis

+0

"'제 질문은 각 함수에서 배열을 검사하고 지정하지 않고 여러 함수 호출을 통해 타일의 ID와 텍스트를 사용할 수있게하는 가장 좋은 방법은 무엇입니까?" "예를 들어 설정 항목을 설정하면 정확하게 . 차이점은'$ GLOBALS' 또는'global' 변수보다는'CI_Config'에서 읽는 것입니다. –

관련 문제