Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Albaz
-31 / 6 / 1
Регистрация: 31.05.2013
Сообщений: 433
#1

Что за путаница со ссыльными переменными? - PHP

23.08.2014, 16:11. Просмотров 302. Ответов 5
Метки нет (Все метки)

PHP
1
2
3
4
5
6
7
8
$a = 'Text'; //присвоение значения переменной
$b = &$a ;  //создание ссыльной переменной, ссылающейся на данную
echo $b. "<br>"; // вывод ссыльной переменной на экран  
$a = 10; // изменение значения переменной 
echo $b. "<br>"; // приводит к изменеиям значения ссыльной
$b = "tru_lya"; 
echo $b. "<br>";
echo $a;
Выводит tru_lya, а не 10 !!!!!!!!
http://www.cyberforum.ru/php-beginners/thread1659283.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2014, 16:11
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Что за путаница со ссыльными переменными? (PHP):

Хочу попрактиковаться. Изучил работу с массивами, переменными, функциями. Что можно написать?
Я уже выучил ассотивный массив, переменные, функции, что с такими знаниями...

Путаница в кавычках
while($rows = mysql_fetch_array($result)) { $i=$i+1; echo '&lt;input...

Путаница с путями
Доброе время суток! Помогите решить проблему с изменением пути Существует...

Что делать с переменными a, b и c?
Составил программу по задаче: даны действительные числа x, y, z. Удвоить эти...

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

5
Jewbacabra
Эксперт PHP
3086 / 2673 / 1221
Регистрация: 24.04.2014
Сообщений: 8,161
23.08.2014, 16:42 #2
Цитата Сообщение от Albaz Посмотреть сообщение
Выводит tru_lya, а не 10 !!!!!!!!
все правильно, в 6 строчке $b = "tru_lya" приводит к изменению a
можно считать ссылку другим именем переменной. получается $a и $b одна и та же переменная
0
|VoroN|
13 / 13 / 11
Регистрация: 24.04.2011
Сообщений: 109
23.08.2014, 16:52 #3
Сложновато объяснить, но при создании жесткоссылочной переменной, память под нее не выделяется, существует лишь сам факт связи между двумя этими переменными. Другими словами 2 эти переменные существуют как одно целое - тобешь одна переменная, в этом то и есть суть жестких ссылок. Так что тут все работает как и должно быть) Если вы хотите иметь возможность изменять значения ссылочных переменных, вам следует обратить внимание на символьные ссылки, хотя честно говоря я в этой теме не особо разбираюсь, т.к. вообще не пользуюсь ими)
0
Albaz
-31 / 6 / 1
Регистрация: 31.05.2013
Сообщений: 433
23.08.2014, 17:39  [ТС] #4
Да, но как бы я понимаю, что "настоящей" переменной остается $a, а $b отображает ее значение.
$a = 'Text';
$b = &$a ;

Но обратное действие никак не ожидается, что бы ссылка определяла ссылаемое. И похоже действительно
Цитата Сообщение от |VoroN| Посмотреть сообщение
при создании жесткоссылочной переменной, память под нее не выделяется, существует лишь сам факт связи между двумя этими переменными. Другими словами 2 эти переменные существуют как одно целое
Ладно. А скажите, какой тогда прок в ссылочных переменных??
Думается, они дают обращение к данным "рид онли". Или как?
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16744 / 6635 / 860
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
23.08.2014, 17:53 #5

Не по теме:

Цитата Сообщение от Albaz Посмотреть сообщение
ссыльной переменной
интересно, куда ее сослали?)


Цитата Сообщение от Albaz Посмотреть сообщение
что "настоящей" переменной остается $a, а $b отображает ее значение.
нет никакой "настоящей" переменной. Есть адрес в памяти компьютера, где хранится значение и есть переменная, ссылающаяся на этот адрес. Создали ссылку -> появилась еще одна переменная, ссылающаяся на этот же адрес. Они равнозначны. Изменили значение любой из ссылочных переменных - перезаписалось значение по адресу, куда указывает переменная.
Цитата Сообщение от Albaz Посмотреть сообщение
А скажите, какой тогда прок в ссылочных переменных??
например, такой
PHP
1
2
3
4
5
6
7
8
9
10
<?php
function f(&$var_name)
{
    return ++$var_name;
}
 
$a = 10;
echo '$a = ', $a, ' ', f($a), ' ', f($a), ' ', f($a), ', $a = ', $a, PHP_EOL;
$a = 0;
echo '$a = ', $a, ' ', f($a), ' ', f($a), ' ', f($a), ', $a = ', $a, PHP_EOL;
Вывод:
PHP
1
2
$a = 10 11 12 13, $a = 13
$a = 0 1 2 3, $a = 3
Добавлено через 2 минуты
Цитата Сообщение от Albaz Посмотреть сообщение
Думается, они дают обращение к данным "рид онли"
Это примерно как синонимы в русском языке. Звучат(выглядят) по разному, но означают одно и то же. Например, слова пилигрим, путешественник, путник и паломник указывают на один смысл..

Добавлено через 32 секунды
http://www.cyberforum.ru/php/thread157657.html
0
|VoroN|
13 / 13 / 11
Регистрация: 24.04.2011
Сообщений: 109
23.08.2014, 18:47 #6
Ну, KOPOJI тебе уже расписал как их можно применять, а вот нужно ли это делать определяешь уже сам в зависимости от ситуации. С моей точки зрения, тут скорее полезно знать не для чего их применять, а где уже они применяются. Для примера, с ними работают некоторые функции. Вот наглядный пример:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* Использование функции без жестких ссылок
*/
$b = "bad";
strtoupper($b); // Функция приводит символы к ВЕРХНЕМУ РЕГИСТРУ
echo $b; //Выведет bad, но буквы останутся маленькими
 
$b = strtoupper($b); 
echo $b; //А вот теперь будет BAD   
 
/**
* Использование функции с жесткими ссылками
*/
 
$a = array(5,3,4,1,2);
sort($a);
var_dump ($a);  //Значения отсортируются как надо,
                // потому как эта функция использует жесткие ссылки
                // поэтому никакие $a = sort($a); не нужны и вообще не приведут к желаемому результату
Пример конечно так себе, но возможно в понимании поможет)
0
23.08.2014, 18:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2014, 18:47
Привет! Вот еще темы с решениями:

Объясните принцип действия foreach: что происходит с переменными
Интересует такой вопрос - когда мы пишем что то наподобее foreach(var a in...

Что происходит с внешними переменными, если объект, создающий новый поток, удалит сборщик мусора
Здравствуйте! Недавно поймал себя на одной мысли. Что происходит с внешними...

путаница с ОС
Совсем запутался весь. Помогите решить проблему. Значит стояла 7, решил...

Путаница с break
if Form1.IdPOP31.Connected then begin MessageCount...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru