【问题标题】:CodeIgniter: Call to a member function contents() on a non-objectCodeIgniter:在非对象上调用成员函数 contents()
【发布时间】:2013-08-07 02:40:42
【问题描述】:

我最近将我的 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 不应该避免这种冲突吗?或者为什么这只会在我的远程机器上发生冲突?

【问题讨论】:

  • 确保在控制器或 config/autoload.php 中加载购物车库
  • 它正在自动加载。这就是它在本地工作的原因,我也尝试在控制器方法中加载库,都返回相同的非对象错误

标签: php codeigniter


【解决方案1】:
function __construct() {
      parent::__construct();
      $this->load->library('cart');
}

【讨论】:

  • 我假设你的意思是把它放在 MY_cart 中不能在那里调用类:'PHP 致命错误:调用非对象中的成员函数 library()'。我正在“自动加载”购物车库,我也尝试在调用 $this->cart->content 之前加载它,两者都返回相同的非对象错误。
猜你喜欢
  • 2011-12-23
  • 2013-08-23
  • 2012-01-09
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
相关资源
最近更新 更多