2012-01-04 9 views
2

私はCIを使用していますが、ログイン情報に基づいてユーザーを選択してuserVOを設定し、この:PHP - メソッドを実行しようとしたスクリプト、または不完全なオブジェクトのプロパティにアクセスしようとしました

$this->session->set_userdata('user', $userVO); 

私はこのセッションにアクセスしようとすると、それは私にこのエラーを返す:私は「ソリューション」を発見した

Message: main() [function.main]: The script tried to execute a method 
or access a property of an incomplete object. Please ensure that the 
class definition "UserVO" 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. 

、私はセッションクラスの前にUserVOクラスをロードするためにCIを必要とし、それ働く

問題は私がたくさんのOS VOクラスを持っていることです。私はそれらをセッション内で必要とし、同時にそれらを必要としないので、それらを自動ロードするのは悪いことです。

回避策はありますか?

ご協力いただきありがとうございます。

+1

'私はVOクラスがたくさんあり、セッションの中でそれらを必要とします' sidenote:CIのセッションはクッキーなので、4Kb程度のスペースに限られています。もちろん、あなたがデータベースを使用していない限り。 –

+0

@DamienPirsyはチップに感謝しますが、それは問題ではありません=] – Gerep

答えて

12

何が起こっているかは、クラスのインスタンスをセッションに保存していることです。それを復元するには、まずインスタンスの基底クラスをロードする必要があります。多くのVOクラスではなく、VOクラスの「インスタンス」がたくさんある可能性が高いです。クラス宣言を持つファイルをロードするだけで済みます。

クラスインスタンスには、実際にはクラス全体ではなく、基本クラスから変更されたものだけが含まれます。したがって、「デフォルト」が何であるかを知るためには、基になるクラスが必要です。

+0

答えをありがとう。私は同じエラーメッセージに直面した。なぜならAPCは明らかにその間に変更されたオブジェクトのコピーを保持していたからだ。 APCのキャッシュをクリアすると、エラーメッセージが「修正」されました。 –

関連する問題