2015-01-09 1 views
0

질문 : 이 경우 나는 PHP 불완전 등급을받지 못하게하려면 어떻게해야합니까?__PHP_Incomplete_Class에 대한 기타 이유

배경 : 코드는 \ $_SESSION['objectCart']에 대한 몇 가지 작업을 수행, 양식에서 POST-변수를 수신 스크립트입니다, 그리고 마지막으로 다른 페이지로 방문자-지시 다시. $_SESSION['objectCart'] 내가 멈출 스크립트를 실행하면 파일

__DIR__ . $lib . 'user.class.php'  

에 정의 된 '카트'클래스의 인스턴스를 포함하고, 추가 조사는 __PHP__Incomplete 클래스를 보여준다.

내 코드 :

require_once __DIR__ . $lib . 'utility.class.php'; 
require_once __DIR__ . $lib . 'productcatalog.class.php'; 
require_once __DIR__ . $lib . 'user.class.php'; 
require_once __DIR__ . $lib . 'cart.class.php'; 

session_start(); 

print_r($_SESSION['objectCart']); 

HTML 출력 :

__PHP_Incomplete_Class Object ([__PHP_Incomplete_Class_Name] => cart [itemsExtended:protected] => Array ([0] => Array ([item_name] => ... 

솔루션 - 부분은 : 그것은 일반적으로이 문제를 그대로

세션은 이미 시작되었다. 카트 클래스를 시작하기 전에

echo session_id(); 

을 입력하여 확인했습니다.

+0

안녕하세요 @ MagnusN 여기를 참조하십시오. - http : // stackoverflow.co.kr/questions/2010427/php-php-my-session-data-with-my-session-data –

+0

당신이하고 싶은 일이 정말로 필요하지는 않지만 원시 인스턴스를 세션에 저장하는 대신 , 직렬화 저장 –

+0

__php_incomplete 클래스는 직렬화에 실패한 경우 생성됩니다. – GordonM

답변

0

덧글에 언급 된 바와 같이 꽤 좋은 중복이 있습니다. 여기에 serialize()을 사용하고 싶을 수도 있습니다. 그러나 나중에 사용할 목적으로 세션에 개체를 저장할 이유가 거의 없습니다.

개체를 만들기 위해 필요한 항목을 세션에 저장 한 다음 필요한 항목을 등록하기 위해 단일 진입 점에서 저장하고 싶습니다. Of, 데이터베이스를 사용하여 필요한 필드를 저장하고 세션에 식별자 만 저장하십시오.

성공적으로 로그인 한 후 모든 응용 프로그램을 통해 현재 로그인 한 사용자에 대한 정보가 필요하다고 가정 해 보겠습니다. User 클래스의 인스턴스를 세션에 할당하는 대신 세션에 세부 정보를 저장하고 새 페이지가 요청 될 때마다 개체를 생성합니다.

ID를 저장하고 새로 고칠 때마다 사용자에 대한 다른 모든 정보를 가져 오도록 DB를 쿼리하면 추가 오버 헤드가 추가 될 수 있지만 여전히 중요한 응용 프로그램이 표시되지 않으면 계속 진행할 것입니다. 둔화.

main_entry_point.php : 당신이 작동하지 않도록

if (isset($_SESSION['user_id'])) { 
    $row = $db->query("SELECT name, email, age, role_id FROM users WHERE id = " . $_SESSION['user_id']); 
    $user = new User($row['name'], $row['email'], $row['age'], $row['role_id']); 
} 

, 당신은 일이있는 경우 등, 등, 응용 프로그램 클래스에 사용자 인스턴스를 주입처럼, 여기에 추가로 설탕이 많이있을 수 있습니다 전역 변수 (이 경우 $user은 MVC 프레임 워크의 index.php와 같이 각 새로 고침에 포함되는 기본 진입 점을 가지고 있기 때문에이 경우 의사 전역 변수입니다.)하지만 여기서는 관련이 없습니다. 긴 이야기를 짧게 - 세션에 저장된 특정 항목에서 장바구니 개체를 등록하십시오.

관련 문제