php - sirve - El script intentó ejecutar un método o acceder a una propiedad de un objeto incompleto
php poo pdf (3)
Debe include
/ require
el php con su clase ANTES de session_start()
como
include PATH_TO_CLASS . ''AuthnetClassFilename.php'';
session_start();
if (isset($_SESSION[''AUTHNET_CART''])) {
//...
}
Recibo un error, el error completo es:
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 "AuthnetCart" 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
Estoy usando la sesión para almacenar el objeto del carrito en él y obtenerlo más tarde en algún momento. El authnetCart es básicamente una clase para objeto de carrito.
// 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;
}
}
......
Puedes ver en la línea 1266, el código no me permite acceder a su método. Cualquier ayuda será muy apreciada. Gracias
Ninguna de las otras respuestas aquí realmente resolvió este problema para mí.
En este caso particular, estaba usando CodeIgniter y agregando cualquiera de las siguientes líneas antes de la línea que causó el error:
$this->load->model(''Authnet_Class'');
O
get_instance()->load->model(''Authnet_Class'')
O
include APPPATH . ''/model/Authnet_Class.php'';
No resolvió el problema.
Authnet_Class
resolverlo invocando la definición de clase en el constructo de la clase donde estaba accediendo a Authnet_Class
. Es decir:
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 ...
Ahora entiendo que el contexto en el que accede a la clase Authnet_Class
, debe tener su definición presente en la construcción de la clase del contexto (y no solo antes de invocar las propiedades de Authnet_Class
).
Parece que tu respuesta está en el mensaje de error.
Antes de deserializar AUTHNET_CART, incluya la clase que lo define. Ya sea manualmente, o utilizando un autocargador.
include PATH_TO_CLASS . ''AuthnetClassFilename.php'';
if(isset($_SESSION[''AUTHNET_CART''])) {//...
Tampoco parece que en realidad lo estés deserializando (¿asumo que esto fue serializado antes de incluirlo en la sesión?)
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;
}
}
...