Обновлено: это поведение воспроизводимо с включенным глобальные запросы.
Имею следующее:
$_SESSION['query_key'] = $_GET['query_key'];
print($query_key);
Против.
$_SESSION['query_key'] = clone $_GET['query_key'];
print($query_key);
Первый выводит значение $ query_key, а второй ничего не печатает. Что за странный побочный эффект у клона?






Вы, должно быть, делаете что-то очень странное со своим кодом. клон предназначен для использования на объектах. Если вы не вставляете объекты в $ _GET, этот код приведет к фатальной ошибке (или предупреждению в более старых версиях PHP).
@Michael Haren - clone фактически делает неглубокую копию объекта, то есть копирует все свойства, но если свойство является ссылкой на другой объект, оно копирует ссылку, а не клонирует другой объект.
Я знаю, что это на самом деле не отвечает на вопрос конкретно, но, основываясь на вашем комментарии к Роборгу, я не думаю, что это хорошее решение проблемы, о которой вы говорите в своем другом вопросе (здесь) - вам было бы лучше отключить register_globals
как только ты это сделаешь
$_SESSION['query_key'] = 'anything'
$ query_key будет ссылкой на $_SESSION['query_key'], поэтому клонирование того, что вы в него вставляете, не будет иметь никакого значения.
Редактировать
Клонирование работает только с объектами, поэтому вы не можете клонировать строку. Это приведет к фатальной ошибке. Я думаю, если вы посмотрите в свои журналы или установите для display_errors значение 'On', вы получите ошибку, а не пустую страницу
Спасибо, tomaigh, отключение register_globals исправило это ... ваш ответ не объяснил, почему он был пустым после клона, однако ... есть идеи?
См. stackoverflow.com/questions/301766/php5-get-variables, почему я использую clone, спасибо.