我最近將我的2.x CodeIgniter應用程序升級到3.0的RC。我的本地機器上的一切運行良好。CodeIgniter:調用一個非對象的成員函數contents()
但是,當我把它扔了一個遠程服務器上,當我嘗試撥打:
$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文件(上面的代碼),從我的庫文件夾中,我會得到相同的 呼叫到會員函數內容()在我在遠程服務器上執行的非對象上。爲什麼刪除自己的購物車擴展程序會導致購物車對象不再存在?
任何關於什麼可能會導致此行爲的見解,我試過在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;
}
}
...家用/ bss_web /公/ development.bluesea.com /公/系統/核心/ CodeIgniter.php(356)
/*
* ------------------------------------------------------
* Call the requested method
* ------------------------------------------------------
*/
call_user_func_array(array(&$CI, $method), $params); // Line 356
...稱爲在/home/bss_web/public/development.bluesea.com/public/ e_once 的index.php(312)
/*
* --------------------------------------------------------------------
* LOAD THE BOOTSTRAP FILE
* --------------------------------------------------------------------
*
* And away we go...
*/
require_once BASEPATH.'core/CodeIgniter.php'; //line 312
編輯:我發現如果我重命名我的控制器,這是失敗的,以'除了'購物車'(它目前是)這似乎工作。不應該CodeIgniter避免這種衝突?或者爲什麼這隻會在我的遠程機器上發生衝突?
確保您正在加載購物車庫或者在您的控制器或config/autoload.php –
它是自動加載。這就是爲什麼它在本地工作的原因,我也試圖在控制器方法中加載庫,兩者都返回相同的非對象錯誤 – nick