我收到错误,完整的错误是:
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
我正在使用会话将购物车对象存储在其中并稍后在某个时刻获取它。 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行看到,代码不允许我访问其方法。任何帮助将受到高度赞赏。感谢
答案 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
的属性之前)。