2013-12-18 16 views
18

sto ricevendo un errore, l'errore completo è:Lo script ha tentato di eseguire un metodo o di accedere a una proprietà di un oggetto incompleta

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 

sto usando sessione per memorizzare carrello oggetto in esso e ottenere più tardi ad un certo punto. L'authnetCart è fondamentalmente di classe per oggetto carrello.

// 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; 
      } 
     } 
...... 

È possibile vedere alla riga 1266, il codice non mi consente di accedere al suo metodo. Qualsiasi aiuto sarà molto apprezzato. Grazie

+0

Come stai inizialmente impostando '$ _SESSION ['AUTHNET_CART']'? –

+3

include la classe AuthnetCart prima di non serializzare o fornire __autoload come indicato dal messaggio di errore. http://www.php.net/manual/en/language.oop5.serialization.php – Mahakala

+1

qual è il var_dump() di $ _SESSION ['AUTHNET_CART']. se non viene come un oggetto, potrebbe anche causare il problema? – Justin

risposta

3

Sembra che la risposta sia nel messaggio di errore.

Prima AUTHNET_CART deserializzazione, comprendono la classe che la definisce. O manualmente o utilizzando un caricatore automatico.

include PATH_TO_CLASS . 'AuthnetClassFilename.php'; 

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

Non sembra che si sta effettivamente deserializzazione, esso sia (sto assumendo questo è stato serializzato prima di ripieno nella sessione?)

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; 
      } 
     } 
... 
28

È necessario include/require la pHP con la classe PRIMAsession_start() come

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

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

@IrfanDayan Questa risposta dovrebbe essere accettata! – gprathour

+0

Come dovremmo farlo se non conosciamo ancora la classe che è memorizzata nella sessione? Sto utilizzando la sessione per archiviare l'oggetto utente se un utente effettua l'accesso, ma gli utenti non devono effettuare il login, quindi non sto caricando la classe utente finché l'utente non esegue l'accesso e ciò si verifica dopo l'avvio della sessione. – James

0

Nessuno dei o le risposte qui hanno effettivamente risolto questo problema per me.

In questo caso particolare ero utilizzando CodeIgniter e aggiungendo le seguenti righe prima della riga che ha causato l'errore:

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

O

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

O

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

non risolve il problema.

sono riuscito a risolverlo invocando la definizione di classe nel costruire della classe in cui mi stava accedendo Authnet_Class. Cioè .:

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

ora capisco che il contesto in cui si accede alla classe Authnet_Class, ha bisogno di avere la sua definizione presenti sul costrutto classe del contesto (e non solo prima di richiamare le proprietà di Authnet_Class).