笨; $非对象上下文中的这种用法

时间:2012-02-17 01:27:37

标签: codeigniter php

我正在尝试在CodeIgniter项目中编辑config/database.php,这样每次将新版本推送到服务器时都不必更改数据库信息。为了完成后者,我创建了一个$debug变量,如下所示,它检查uri是否在我的localhost机器上运行(我在上载之前构建项目)或在实际服务器上运行。

不幸的是在database.php文件中,我无权访问$this变量,而且我个人对PHP中的OOP不熟悉,我并不完全确定如何解决这个问题。请问您能告诉我怎么做?

谢谢,

最大

致命错误:在第51行的application / config / database.php中不在对象上下文中时使用$ this

$debug = strpos($this->uri->config->item('base_url'), 'localhost'); //line 51

$db['default']['hostname'] = $debug == TRUE ? 'x' : 'y';
$db['default']['username'] = $debug == TRUE ? 'x' : 'y';
$db['default']['password'] = $debug == TRUE ? 'x' : 'y';
$db['default']['database'] = $debug == TRUE ? 'x' : 'y';

5 个答案:

答案 0 :(得分:13)

您需要获取codeigniter对象的实例 -

$CI = get_instance();

对于旧版本的php,请使用=&

然后,在通常使用$CI

的任何地方使用$this

答案 1 :(得分:2)

您需要使用get_instance()来获取$this变量。

$ci = get_instance(); // $ci replaces $this
echo $ci->config->item('base_url');

$this变量是面向对象代码中使用的特殊变量,当你有类时 - 请参阅php.net以获取一些背景知识。

答案 2 :(得分:0)

$this仅适用于对象,不能在对象外使用它。我相信,最好的方法是在部署时排除database.php文件。您使用的IDE应该有一个从部署中排除文件的选项。

答案 3 :(得分:0)

这个问题有一个简单的答案。

阅读环境部分: http://codeigniter.com/user_guide/libraries/config.html

基本上创建两个文件夹 application / config / production和 应用/配置/发展

并在每个文件夹中放入database.php的一个副本。

答案 4 :(得分:0)

您还可以使用$_SERVER['SERVER_NAME']并将其与服务器名称(localhost或remote)进行比较。 CI中有一个功能可以检查它:

$this->input-> server('SERVER_NAME')

如上所述,如果不在对象上下文中,则必须更改this