Php 如何使Codeigniter函数变量全局可用?
我正在做一个简单的游戏,用户将随机生成一个宾果板。一旦他们初始化了游戏(即在index.php上单击“start”后的第1轮),代码就开始使用新的控制器(bingo_play.php)。此控制器跟踪已标记的磁贴以及每个磁贴中的信息 代码如下:Php 如何使Codeigniter函数变量全局可用?,php,codeigniter,Php,Codeigniter,我正在做一个简单的游戏,用户将随机生成一个宾果板。一旦他们初始化了游戏(即在index.php上单击“start”后的第1轮),代码就开始使用新的控制器(bingo_play.php)。此控制器跟踪已标记的磁贴以及每个磁贴中的信息 代码如下: $card['products'] = array( 1 => 'hamburger', 2 => 'fries', 3 => 'soda', 4 => 'taco', 5 => 'ba
$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和文本可用的最佳方法是什么?
global
变量和$GLOBALS
可能会导致很多问题,除此之外,调试起来可能非常困难。它们是有用的,但一旦你开始以这种方式处理每一个问题,事情就会失控,难以维护
我的问题是,制作互动程序id和文本的最佳方法是什么
可通过多个函数调用使用,无需检查和
在每个函数中分配数组
虽然我不是100%清楚您在使用什么,如果卡数据是静态的或不是静态的,或者如果用户可以拥有多张卡或更新卡,这些提示可能会有所帮助:
如果数据从未更改,请使用对您有利的。将其存储在配置文件中,加载它,然后使用config\u item()
或$this->config->item()
读取项目
如果不仅仅是一些静态数据,那么考虑创建一个类/库来处理所有相关的“宾果板”。一个非常简单的例子:
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\u card()
、validate\u card()
、update\u card()
等函数来扩展。如果需要存储多张卡,只需为$card
属性使用一个数组,然后按数组索引设置/获取项目
但是,如果您需要数据在不同的请求之间持久化,并且数据不是静态的(例如,它在每个请求之后更新),则必须使用它或将其存储在数据库中,以便在下一个请求/页面中检索它。只需存储尽可能少的数据,比如卡id
Codeigniter(以及PHP)为您提供了几种解决问题的方法。最后,使用最适合你的方法。全局变量是获取/设置任意数据的一种非常方便的惰性方式,但如果您可以避免使用它们,您应该这样做。
Global
变量和$GLOBALS
可能会导致许多问题,除此之外,调试起来可能非常困难。它们是有用的,但一旦你开始以这种方式处理每一个问题,事情就会失控,难以维护
我的问题是,制作互动程序id和文本的最佳方法是什么
可通过多个函数调用使用,无需检查和
在每个函数中分配数组
虽然我不是100%清楚您在使用什么,如果卡数据是静态的或不是静态的,或者如果用户可以拥有多张卡或更新卡,这些提示可能会有所帮助:
如果数据从未更改,请使用对您有利的。将其存储在配置文件中,加载它,然后使用config\u item()
或$this->config->item()
读取项目
如果不仅仅是一些静态数据,那么考虑创建一个类/库来处理所有相关的“宾果板”。一个非常简单的例子:
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\u card()
、validate\u card()
、update\u card()
等函数来扩展。如果需要存储多张卡,只需为$card
属性使用一个数组,然后按数组索引设置/获取项目
但是,如果您需要数据在不同的请求之间持久化,并且数据不是静态的(例如,它在每个请求之后更新),则必须使用它或将其存储在数据库中,以便在下一个请求/页面中检索它。只需存储尽可能少的数据,比如卡id
Codeigniter(以及PHP)为您提供了几种解决问题的方法。最后,使用最适合你的方法。全局变量是获取/设置任意数据的一种非常方便的惰性方式,但是如果您可以避免使用它们,那么您应该。查看依赖项注入容器。查看依赖项注入容器。@Louis:由于Codeigniter作为一个大的超级对象运行,只要类被加载,您就可以从任何地方访问它,和配置项始终可用。我不知道你在这里是什么意思,我觉得你对我的否决票只是一个孩子。你的回答根本不包括问题中提出的问题。“
我的问题是,通过多个函数调用而不必检查和分配每个函数中的数组,使瓷砖的id和文本可用的最佳方法是什么?
”例如,设置一个配置项就可以做到这一点。不同之处在于,您阅读的是CI_Config
而不是$GLOBALS
或更糟的:global
变量。如何使Codeigniter函数变量全局可用?
如果不使用对get_instance()的全局辅助调用,设置配置项将无法实现全局可用性代码>或配置项()代码>为什么您认为调用全局框架函数比调用全局语言数组更好的做法没有任何意义。他们都是天生的肮脏黑客,使用的是