オブジェクトが存在しない場合にオブジェクトを返すか作成する静的メソッドがあります。ID 引数をオブジェクトに渡すエレガントな方法を見つけたいと思います。
ここでのロジックは、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)
と、期待どおりの結果が得られます。gameID が 5 の Game オブジェクト。
を呼び出すApp::get_game()
と、期待どおりの結果が得られません。これは、gameID が 1 の Game オブジェクトになります。代わりに、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;
}
}
これを処理するためのより簡単な/より良い/よりエレガントな方法はありますか? 理想的には、デフォルトの ID 宣言を Game クラス自体に保持するものですか?