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

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

0 голосов
/ 19 ноября 2008

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

У меня есть следующее:

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

Vs.

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

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

Ответы [ 2 ]

3 голосов
/ 19 ноября 2008

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

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

0 голосов
/ 19 ноября 2008

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

как только вы сделаете

$_SESSION['query_key'] = 'anything'

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

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

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

...