Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: передача по ссылке
Форумы портала PHP.SU » » Вопросы новичков » передача по ссылке

Страниц (1): [1]
 

1. Bio man - 11 Апреля, 2016 - 21:29:34 - перейти к сообщению
когда то была возможность сделать так
PHP:
скопировать код в буфер обмена
  1.  
  2. function test($a) {}
  3. $a = ['test'];
  4. test(&$a);
  5. test(['test']); // или так
  6.  

вот не пойму, почему убрали такую возможность, удобно же.
Теперь, что бы передать аргумент по ссылке, нужно сделать так, что не очень удобно
PHP:
скопировать код в буфер обмена
  1.  
  2. function test(&$a) {}
  3. $a = ['test'];
  4. test($a);
  5. test(['test']); // так уже не сделаешь!
  6.  

т.е. приходится создавать переменную и потом передавать ее.
2. Viper - 11 Апреля, 2016 - 22:13:48 - перейти к сообщению
Bio man пишет:
что не очень удобно
как раз таки удобно это в объявлении функции, а не где-то в глубинах кода стопицот раз объявлять.
3. OrmaJever - 12 Апреля, 2016 - 15:08:10 - перейти к сообщению
Bio man пишет:
вот не пойму, почему убрали такую возможность, удобно же.

Это может привести к неопределённости и проблемам т.к. функция может изменять этот параметр как угодно потому что она не расчитывает на передачу по ссылке. Например
PHP:
скопировать код в буфер обмена
  1. function hash( string $pass ) {
  2.    $param .= 'SALT';
  3.    return md5($param);
  4. }
  5.  
  6. $pass = $_POST['pass'];
  7. $hash = hash(&$pass);
  8.  
  9. if( strlen($pass) < 6 ) {
  10.    die('больше 6 символов');
  11. }
  12.  

Представим что функция hash определена где-то в глубине фреймворка и ты не видишь ее код, ты только знаешь что она возвращает хеш пароля. Пишем код, который вроде бы корректный, но он не работает, пропускает пароли больше 2 символов (а если соль больше то может вообще пустой пропустить). И это только простой пример, не определенности, а может быть хуже, и можно убить много времени на дебаг таких ситуаций. Поэтому если функция не рассчитывает на ссылку то не нужно ее туда пихать

 

Powered by ExBB FM 1.0 RC1