我最近将我的 2.x CodeIgniter 应用程序升级到 3.0 的 RC。在我的本地机器上一切都运行良好。
但是当我尝试调用时将它扔到远程服务器上时:
$this -> cart -> contents();
我收到此错误:
PHP Fatal error: Call to a member function contents() on a non-object in ...
如果我
var_dump($this->cart)
在我的本地机器上,我得到了返回的预期购物车对象,但返回相同
NULL
在我的远程服务器上运行时。
我还有一个购物车的扩展类,就是这样:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Cart extends CI_Cart
{
function __construct()
{
parent::__construct();
$this->product_name_rules = '\d\D';
$this->product_id_rules = '\d\D';
}
}
如果我从我的库文件夹中删除 MY_Cart.php 文件(上面的代码),我将在非对象上获得与我在远程服务器上执行的相同的对成员函数 contents() 的调用。为什么删除我自己的购物车扩展会导致购物车对象不复存在?
关于可能导致此行为的任何见解,我尝试在 CodeIgniter 论坛上询问,但没有成功。
我的本地机器和远程服务器都在运行 PHP 5.4.17。
这是一个堆栈跟踪:
"…bss_web/public/development.bluesea.com/public/application/controllers/
cart.php (32) in Cart::add called at ? (?)"
//increment quantity by 1 if PN is already in cart
$qty = 1;
$items = $this->cart->contents(); //line 32
foreach ($items as $key => $item) {
if ($item['id'] == $pid) {
$qty = $item['qty'] + 1;
}
}
…home/bss_web/public/development.bluesea.com/public/system/core/ CodeIgniter.php (356)
/*
* ------------------------------------------------------
* Call the requested method
* ------------------------------------------------------
*/
call_user_func_array(array(&$CI, $method), $params); // Line 356
…e_once 在 /home/bss_web/public/development.bluesea.com/public/index.php (312) 调用
/*
* --------------------------------------------------------------------
* LOAD THE BOOTSTRAP FILE
* --------------------------------------------------------------------
*
* And away we go...
*/
require_once BASEPATH.'core/CodeIgniter.php'; //line 312
编辑:我发现如果我将失败的控制器重命名为“购物车”(目前是)以外的其他名称,这似乎可行。CodeIgniter 不应该避免这种冲突吗?或者为什么这只会在我的远程机器上发生冲突?