За последние 24 часа нас посетил 17271 программист и 1291 робот. Сейчас ищет 1571 программист ...

Равнозначны ли команды sort(&$files) и sort($files)?

Тема в разделе "Вопросы от блондинок", создана пользователем Геон, 30 май 2016.

  1. Геон

    Геон Активный пользователь

    С нами с:
    23 июл 2013
    Сообщения:
    40
    Симпатии:
    0
    Адрес:
    из Москвы
    В PHP 5.3 код:
    Код (Text):
    1. sort( &$files );
    страница отображается.
    В PHP 5.4 уже выходит ошибка '500'.
    Исправил код на
    Код (Text):
    1. sort( $files );
    Заработало и PHP 5.4
    Сортировка происходит, вроде бы, также.

    Подскажите, пожалуйста, при каких условиях результат выполнения инструкций:
    Код (Text):
    1. sort( &$files );
    и
    Код (Text):
    1. sort( $files );
    может различаться?
     
  2. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    • & - это ссылка. Конкретно в данной ситуации она бессмысленна и суть от этого не поменяется.
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    PHP:
    1. sort( &$files );
    должно выкинуть предупреждение или ошибку, потому что там при определении функции уже стоит &
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Раньше нужно было явно указывать передачу по ссылке и в сигнатуре функции и при использовании. С 5.3 было решено оставить это указание непосредственно в сигнатуре и попытка запихнуть амперсанд в вызов приводит к неожиданному результату - предупреждению об устаревшем функционале для версии 5.3 и фатальную ошибку для 5.4 (https://php.net/manual/ru/language.references.pass.php).
    То есть @Геон просто не видел кучи предупреждений о deprecated функционале, а при переходе на 5.4 сразу получил белый экран. Вот почему важно читать патч-ноты и гайды по миграции.
     
    VLK нравится это.