Аргументы основной функции PHP;Руководство говорит, что ссылка, однако она принимает значения - PullRequest
5 голосов
/ 16 августа 2011

Я заметил некоторые несоответствия в руководстве по PHP; задокументировано несколько сигнатур основных функций для приема аргументов по ссылке, однако они принимают аргументы по значению.

Ранее я опубликовал более конкретный вопрос , и @cweiske предоставил отличный ответ ( со ссылкой на соответствующий источник PHP ), однако эти несоответствия кажутся более распространенными.

На это влияет ряд функций ( Я обновлю этот список как ордера; также обратите внимание, что эти тесты были выполнены в error_reporting(-1) среде )

Теперь я обеспокоен не тем, что занимаюсь анализом документации, а тем, что боюсь, что разработчики PHP находятся на грани детали реализации этих функций ( или что-то столь же ненадежное )

Я использую array_replace_recursive(), например, чтобы взять аргумент массива и применить его к другому массиву, содержащему значения по умолчанию. Некоторые из моих кодовых баз воспользовались этим несоответствием, чтобы просто сделать:

$values = array_replace_recursive(array(
    'setting_1' => array(
        'sub-setting_1' => '',
        'sub-setting_2' => '',
        'sub-setting_3' => '',
     ),
    'setting_2' => array(
        'sub-setting_1' => 0,
        'sub-setting_2' => 0,
     ),
     'setting_3' => true,
), $values);

Таким образом, создается правильно отформатированный массив ( для обхода безвозмездных isset() вызовов )

Должен ли я быть обеспокоен этим? Я подумываю о том, чтобы отправить запрос об ошибке, связанной с документацией, но сначала мне любопытно, если кто-то на SO ( смотрит в вашу сторону @ cweiske ) имеет представление о , почему это было сделано .

1 Ответ

2 голосов
/ 17 августа 2011

Возможно, я не понимаю вашу дилемму, но эти функции напрямую не изменяют данные в своих параметрах, поэтому, принимают ли они через ссылку или значение, это своего рода спорный вопрос, не так ли?В любом случае вам нужно будет присвоить возвращаемое значение, если вы хотите, чтобы вызов функции действительно делал что-нибудь для вас.

С точки зрения понимания почему Вы можете увидеть несоответствие.В PHP 5 было внесено много изменений в работу ссылок.На самом деле, я считаю, что это PHP 5.3+, который больше не позволяет использовать & для назначения по ссылке.То, что вы можете увидеть, - это переход некоторых основных функций PHP к новым правилам назначения ссылок.Если мне не изменяет память, ветка PHP 5.3 изначально предназначалась для PHP 6, но была решительно объединена в ствол как ветвь, а не ожидала завершения нескольких сложных функций.Это объясняет, почему вы никогда не видели такой путаницы в PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...