0

私は次の方法でクラスを呼び出しました:

$user = new user;

次に、セッション変数を定義しました:

$_SESSION['user']= 'username';

私のスクリプトでは、$_SESSION['user']それが示したいくつかの関数で使用されていることをエコーし​​ます。

Catchable fatal error: Object of class user could not be converted to string in /home/username/public_html/cart-admin/include/classes/class.auth.php
4

2 に答える 2

1

いいえ、 $_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 つの修正方法があります。

  1. セッション内に (オブジェクトではなく) ユーザー名プロパティを格納します。例:$_SESSION['user'] = $user->getName();または$_SESSION['user'] = $user->name;
  2. この暗黙的な変換を可能にするには、クラスでマジック__toString()メソッド (マニュアルを参照)を使用します。userでは、オブジェクト__toString()内からユーザー名を返すだけです。user

私はオプション 1 を選びます。これはより要点があり、ユーザー オブジェクトのシリアル化をセッションに保存しません。

于 2012-06-16T18:06:51.593 に答える
0

あなたのスクリプトuserは $_SESSION 変数に呼び出されたオブジェクトを保存しているようです。文字列が見えないのはそのためですusername。スクリプトから上書きされている可能性があります。ユーザー名を保存するには、別のキーワードを使用する必要があります。

于 2012-06-16T16:52:04.467 に答える