いいえ、 $_SESSION がuser
クラスのオブジェクト/インスタンスと競合することはありません。
これが実際のコードであるというあなたの状態にもかかわらず、'username'
スクリプトでハードコードしたとは信じがたいです。;-)
実際のコードが次のようになっていると仮定します。
$user = new user;
// ... many lines between ...
$_SESSION['user'] = $user;
// ... more lines between ...
echo $_SESSION['user'];
...エラーは簡単に説明できます。これを行うecho $_SESSION['user']
と、PHP は、この変数で参照されているオブジェクト ( class のオブジェクトuser
) を文字列に暗黙的に変換して、出力できるようにしようとします。
私が正しいかどうかを確認するには、次のコードを の直前に挿入しますecho
。
echo "session variable 'user' is of type: ", gettype($_SESSION['user']);
どちら.. is of type: user
が私が期待するものであるか、またはあなたが望む.. is of type: string
ものであるかが表示されます。
これには 2 つの修正方法があります。
- セッション内に (オブジェクトではなく) ユーザー名プロパティを格納します。例:
$_SESSION['user'] = $user->getName();
または$_SESSION['user'] = $user->name;
- この暗黙的な変換を可能にするには、クラスでマジック
__toString()
メソッド (マニュアルを参照)を使用します。user
では、オブジェクト__toString()
内からユーザー名を返すだけです。user
私はオプション 1 を選びます。これはより要点があり、ユーザー オブジェクトのシリアル化をセッションに保存しません。