Как работает «клон» PHP5?

Обновлено: это поведение воспроизводимо с включенным глобальные запросы.

Имею следующее:

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

Против.

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

Первый выводит значение $ query_key, а второй ничего не печатает. Что за странный побочный эффект у клона?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
1 000
2

Ответы 2

Вы, должно быть, делаете что-то очень странное со своим кодом. клон предназначен для использования на объектах. Если вы не вставляете объекты в $ _GET, этот код приведет к фатальной ошибке (или предупреждению в более старых версиях PHP).

@Michael Haren - clone фактически делает неглубокую копию объекта, то есть копирует все свойства, но если свойство является ссылкой на другой объект, оно копирует ссылку, а не клонирует другой объект.

См. stackoverflow.com/questions/301766/php5-get-variables, почему я использую clone, спасибо.

EoghanM 19.11.2008 15:35

Я знаю, что это на самом деле не отвечает на вопрос конкретно, но, основываясь на вашем комментарии к Роборгу, я не думаю, что это хорошее решение проблемы, о которой вы говорите в своем другом вопросе (здесь) - вам было бы лучше отключить register_globals

как только ты это сделаешь

$_SESSION['query_key'] = 'anything'

$ query_key будет ссылкой на $_SESSION['query_key'], поэтому клонирование того, что вы в него вставляете, не будет иметь никакого значения.

Редактировать

Клонирование работает только с объектами, поэтому вы не можете клонировать строку. Это приведет к фатальной ошибке. Я думаю, если вы посмотрите в свои журналы или установите для display_errors значение 'On', вы получите ошибку, а не пустую страницу

Спасибо, tomaigh, отключение register_globals исправило это ... ваш ответ не объяснил, почему он был пустым после клона, однако ... есть идеи?

EoghanM 19.11.2008 17:43

Другие вопросы по теме