webentwicklung-frage-antwort-db.com.de

Das Skript hat versucht, eine Methode auszuführen oder auf eine Eigenschaft eines unvollständigen Objekts zuzugreifen

Ich erhalte eine Fehlermeldung. Die vollständige Fehlermeldung lautet:

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

Ich verwende eine Sitzung, um das Warenkorbobjekt darin zu speichern und es irgendwann später abzurufen. Die authnetCart ist im Grunde eine Klasse für ein Wagenobjekt.

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

Sie können in Zeile 1266 sehen, der Code erlaubt mir nicht, auf seine Methode zuzugreifen. Jede Hilfe wird sehr geschätzt. Vielen Dank

22
Irfan Dayan

Sie müssen include/require die PHP mit Ihrer KlasseVORsession_start() mögen

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

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

Ihre Antwort scheint in der Fehlermeldung zu sein. 

Bevor Sie AUTHNET_CART desialisieren, schließen Sie die Klasse ein, die sie definiert. Entweder manuell oder mit einem Autoloader.

include PATH_TO_CLASS . 'AuthnetClassFilename.php';

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

Es scheint auch nicht, dass Sie es tatsächlich desialisieren.

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
Evil Buck

Keine der anderen Antworten hier hat dieses Problem tatsächlich für mich gelöst.

In diesem speziellen Fall habe ich CodeIgniter verwendet und eine der folgenden Zeilen vor der Zeile eingefügt, die den Fehler verursacht hat:

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

OR

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

OR

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

Hat nicht das Problem gelöst.

Ich habe es gelöst, indem ich die Klassendefinition im construct der Klasse aufgerufen habe, auf die ich auf Authnet_Class zugegriffen habe. I.e .:

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

Ich verstehe jetzt, dass der Kontext, in dem Sie auf die Authnet_Class-Klasse zugreifen, über eine Definition im Klassenkonstrukt des Kontextes verfügen muss (und nicht unmittelbar bevor Sie die Eigenschaften von Authnet_Class aufrufen).

0
CPHPython