该脚本尝试执行方法或访问不完整对象的属性

时间:2013-12-18 17:10:14

标签: php wordpress session session-variables

我收到错误,完整的错误是:

Fatal error: authnet_cart_process() [<a href='function.authnet-cart-process'>function.authnet-cart-process</a>]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition &quot;AuthnetCart&quot; of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in /home/golfetc/public_html/wp-content/plugins/sccp-2.4.0/authnet_functions.php on line 1266

我正在使用会话将购物车对象存储在其中并稍后在某个时刻获取它。 authnetCart基本上是购物车对象的类。

// Check cart in session
    if(isset($_SESSION['AUTHNET_CART'])) {
        // Get cart from session
        $authnetCart = $_SESSION['AUTHNET_CART'];
        foreach($authnetCart->getCartItems() as $item) {  // Line#1266
            if ($item->getItemId() == $subscription_details->ID ) {
                $addNewItem = false;
                break;
            }
        }
......

您可以在第1266行看到,代码不允许我访问其方法。任何帮助将受到高度赞赏。感谢

3 个答案:

答案 0 :(得分:40)

您需要include / require与您的班级之前的 session_start()

include PATH_TO_CLASS . 'AuthnetClassFilename.php';
session_start();

if (isset($_SESSION['AUTHNET_CART'])) {
    //...
}

答案 1 :(得分:3)

似乎您的答案出现在错误消息中。

在反序列化AUTHNET_CART之前,请包含定义它的类。手动或使用自动装带器。

include PATH_TO_CLASS . 'AuthnetClassFilename.php';

if(isset($_SESSION['AUTHNET_CART'])) {//...

看起来您实际上并未将其反序列化(我假设在将其填充到会话之前已将其序列化?)

if(isset($_SESSION['AUTHNET_CART'])) {
        // Get cart from session

        /** UNSERIALIZE **/
        $authnetCart = unserialize($_SESSION['AUTHNET_CART']);
        foreach($authnetCart->getCartItems() as $item) {  // Line#1266
            if ($item->getItemId() == $subscription_details->ID ) {
                $addNewItem = false;
                break;
            }
        }
...

答案 2 :(得分:0)

这里没有其他答案实际上为我解决了这个问题。

在这种特殊情况下,我使用CodeIgniter并在导致错误的行之前添加以下任何行:

 $this->load->model('Authnet_Class');

OR

 get_instance()->load->model('Authnet_Class')

OR

 include APPPATH . '/model/Authnet_Class.php';

解决了问题。

我设法通过在我访问Authnet_Class的类的构造中调用类定义来解决它。即:

class MY_Current_Context_Class extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('Authnet_Class');
    }
    // somewhere below in another function I access Authnet_Class ...

我现在明白,访问Authnet_Class类的上下文需要在上下文的类构造中显示其定义(而不是在调用Authnet_Class的属性之前)。