0

編集: この動作は、クエリ グローバルをオンにすると再現可能です。

私は次のものを持っています:

  $_SESSION['query_key'] = $_GET['query_key'];
  print($query_key);

対。

  $_SESSION['query_key'] = clone $_GET['query_key'];
  print($query_key);

前者は $query_key の値を出力しますが、後者は何も出力しません。これはクローンのどのような奇妙な副作用ですか?

4

2 に答える 2

3

コードで非常に奇妙なことをしているに違いありません。 cloneはオブジェクトで使用します。オブジェクトを $_GET に詰め込まない限り、そのコードは致命的なエラー (または古いバージョンの PHP では警告) になります。

@Michael Haren - clone は実際にはオブジェクトの浅いコピーを行います。つまり、すべてのプロパティをコピーしますが、プロパティが別のオブジェクトへの参照である場合、他のオブジェクトを複製するのではなく、参照をコピーします。

于 2008-11-19T12:15:44.127 に答える
0

これは実際には質問に具体的に答えていないことは知っていますが、Roborgへのコメントに基づくと、これは他の質問(ここ)で参照している問題の良い解決策ではないと思います-register_globalsを無効にした方がよいでしょう

あなたがするやいなや

$_SESSION['query_key'] = 'anything'

$ query_keyはへの参照になる $_SESSION['query_key']ので、そこに入れているものを複製しても違いはありません

編集

クローンはオブジェクトでのみ機能するため、文字列のクローンを作成することはできません。その結果、致命的なエラーが発生します。ログを確認するか、display_errorsを「On」に設定すると、空白のページではなくエラーが発生すると思います

于 2008-11-19T13:29:16.210 に答える