Подтвердить что ты не робот

Script попытался выполнить метод или получить доступ к свойству неполного объекта

Я получаю сообщение об ошибке, полная ошибка:

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, код не позволяет мне получить доступ к его методу. Любая помощь будет высоко оценена. Благодаря

4b9b3361

Ответ 1

Вам нужно include/require php с вашим классом до session_start() как

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

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

Ответ 2

Кажется, что ваш ответ находится в сообщении об ошибке.

Перед тем, как выполнить переориентирование 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;
            }
        }
...

Ответ 3

Ни один из других ответов здесь фактически не решил эту проблему для меня.

В этом конкретном случае я использовал CodeIgniter и добавлял одну из следующих строк до строки, вызвавшей ошибку:

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

ИЛИ

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

ИЛИ

 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).