我正在开发一个简单的游戏,用户将随机生成一个宾果游戏板。一旦他们初始化游戏(即在index.php上点击“start”后第1轮),代码就会开始使用新的控制器(bingo_play.php)。该控制器跟踪已标记的图块和每个图块中的信息。
以下是代码:
$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()
。
我的问题是,通过多个函数调用使tile的id和text可用的最佳方法是什么,而不必在每个函数中检查和分配数组?
答案 0 :(得分:1)
global
变量和$GLOBALS
会导致很多问题,而且最重要的是调试非常困难。它们有它们的用途,但是一旦你开始以这种方式解决每一个问题,事情就会失控并且难以维持。
我的问题是,制作瓷砖ID和文字的最佳方法是什么 通过多个函数调用提供,无需检查和 在每个函数中分配数组?
虽然我不是100%清楚你正在使用什么,如果卡数据是静态的,或者用户可以拥有多张卡或更新卡,这些提示可能有所帮助:
如果数据永不改变,请使用Config class。将其存储在配置文件中,加载并使用config_item()
或$this->config->item()
读取项目。
如果它不仅仅是一些静态数据,请考虑创建一个类/库来处理所有“bingo board”相关的内容。一个非常简单的例子:
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;
}
}
然后你可以这样访问卡片:
$this->bingo_board->get_card();
将在请求期间设置值,您可以通过添加reset_card()
,validate_card()
,update_card()
等功能对其进行扩展。如果您需要存储许多卡,只需使用数组作为$card
属性,并按数组索引设置/获取项目。
但是,如果您需要数据在不同请求中持久存在,并且数据不是静态的(例如,在每次请求后更新),则必须使用session data或将其存储在数据库中以便在下一个请求/页面中检索它。只需存储尽可能少的数据,例如卡片ID。
Codeigniter(和PHP就此问题)提供了几种解决问题的方法。最后 - 使用最适合您的方法。获取/设置任意数据的全局变量可以是一种很好的方便的懒惰方式,但是如果你可以避免使用它们 - 你应该这样做。