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. voltdem - 02 Февраля, 2011 - 08:16:08 - перейти к сообщению
Использовал XAMPP 1.7.3 и Denwer.
Не работает возврат значений по ссылкам.

<?php
function &find_var($var1,$var2){
return $var1;
}

$a=10;
$b=100;
$perem = &find_var($a,$b);

$perem++;
echo $a."<br />".$b."<br />";
echo $perem;
?>
выводит:
10
100
11
Хотя судя по теории, должно выводить одинаковые значения $a и $perem.
Встретил подобные примеры в книге "Джон Коггзолл. PHP5.Полное руководство"
C 52 стр. подобный пример с ссылками тоже не работает.
Подскажите, почему такое происходит?
PS У обоих веб-серверов php 5.3.x.
2. grefon - 02 Февраля, 2011 - 10:28:14 - перейти к сообщению
Скрипт отрабатывает все правильно. И почему $a и $perem должны быть одинаковы, когда Вы делаете $perem++;?

PS. Обрамляйте код в спец-теги!
3. OrmaJever - 02 Февраля, 2011 - 13:07:48 - перейти к сообщению
$perem будет равно 10 только если написать вот так

а последующий вызов уже будет на одни больше.
4. voltdem - 03 Февраля, 2011 - 08:51:58 - перейти к сообщению
http://php.su/learnphp/?re
Я у меня конкретный пример не работает
Цитата:

Возврат значений по ссылке
Рассмотрим еще одну возможность пользовательских функций PHP - возврат ссылок.

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

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function &find_var($param)
  3. {
  4.      /* ... код ... */
  5.      return $found_var;
  6. }
  7.  
  8. $foo =& find_var($bar);
  9. $foo->x = 2;
  10. ?>

В этом примере устанавливается свойство объекта, возвращённого функцией find_var, а не его копии, как было бы без использования ссылок.

В том то и прикол, что $perem по теории должна ссылаться на $a, что у меня не происходит, а присваивается значение переменной $a.
(Добавление)
PS. Я пробовал и этот пример, и создавал класс для объекта, буду благодарен, если вы приведете работающий у вас пример по данной теории.
Все приведенные выше высказывания правильны без использования ссылок, в данном же примере четко говорится про ссылки.
5. TM123 - 03 Февраля, 2011 - 10:01:43 - перейти к сообщению
Не все примеры и не всегда работают или их описание соответствует тому что они делают.

На мой взгляд этот пример не может работать так как написано в его описании, т.е. то что вы получаете в реальности - это правильно.

$a вы передаете по значению, почему в $perem у вас должна быть ссылка на $a?
6. Alex_1 - 25 Ноября, 2011 - 01:05:31 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1. function &find_var ($three) {
  2.  
  3. if (($three > 0) && ($three <= 10)) return $three;
  4.  
  5. }
  6.  
  7. $c_three = 4;
  8. $right_var = &find_var (&$c_three);
  9. $right_var++;
  10.  
  11. echo $c_three . ' ' . $right_var;


Вот так работает возврат значения по ссылке.
Можно без условного оператора но с возвратом значения.

 

Powered by ExBB FM 1.0 RC1