2012-09-29 5 views
0

개체가 없으면 반환하거나 만드는 정적 메서드가 있습니다. 개체에 ID 인수를 전달하는 것을 처리하는 우아한 방법을 찾고 싶습니다.PHP에서 인수로 정의되지 않은 변수 또는 배열 오프셋 사용

여기에 논리는 ID가 전달되면 해당 ID로 개체가 만들어지는 것입니다. 그렇지 않은 경우 기본 ID로 생성됩니다. 내가 가진 무엇

이었다

class App { 
    private $game_obj; 

    public static function get_game ($arguments) { 
    if (!isset($this->game_obj)) 
      $this->game_obj = new Game ($arguments[0]); 

    return $this->game_obj; 
    } 
} 

class Game { 
    private $gameID; 

    public function __construct ($id=1) { 
     $this=>gameID = $id; 
     /* other code */ 
    } 
} 

나는 내가 기대하는 결과를 얻을 수 App::get_game(5)를 호출 할 때. 내가 App::get_game() 전화 5.

의 게임 ID를 가진 게임 오브젝트는 내가 대신 내가 오프셋 undefined가에 대한 오류 1의 게임 ID와 게임 객체가 될 것이라고 나는 기대하는 결과를 얻을 수 없습니다 할 App::get_game().

다음과 같이 App::get_game()을 업데이트했지만 특히 좋지 않습니다. 클래스 정의에서 기본 ID를 정의하는 것을 선호합니다.

class App { 
    private $game_obj; 

    public static function get_game ($arguments) { 
    if (!isset($this->game_obj)) { 
      $default_id = 1; // I don't like having this here 
      $id = isset ($arguments[0] ? $arguments[0] : $default_id; 
      $this->game_obj = new Game ($id); 
     } 

    return $this->game_obj; 
    } 
} 

이 문제를 처리하는 데있어 좀 더 간단하고 우수한 방법이 있습니까? 이상적으로 Game 클래스 자체에 내 기본 ID 선언을 유지할 것입니까?

+0

5'하지만 방법은 기대는'$의 arguments'은 배열입니다. –

+0

정말 더 좋은지는 모르지만 위의 코드를 그대로 사용하면 get_game 정적 메서드로 삼항 연산을 이동할 수 있지만 5 행에서 Game 개체를 만들 때 다음과 같이합니다 : $ this-> game_obj = 새로운 게임 (isset ($ arguments [0])? $ arguments [0] : 1); – Gavin

답변

0

public static function get_game ($arguments=null) { 
if($arguments==null) //etc.. 

을 시도 했습니까?

0

으로 테스트 할 수 있습니다 당신은`스칼라에 전달하는

if(is_object($my_object)) { 

    } 
관련 문제