Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
-30 / 8 / 1
Регистрация: 31.05.2013
Сообщений: 485

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

23.08.2014, 16:11. Показов 622. Ответов 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 !!!!!!!!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.08.2014, 16:11
Ответы с готовыми решениями:

Что не так с переменными?
Привет знатоки! Я самый начинающий в Java (полный чайник). Решил написать маленькую программку, которая бы находила в массиве самое большое...

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

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

5
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
23.08.2014, 16:42
Цитата Сообщение от 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
Сложновато объяснить, но при создании жесткоссылочной переменной, память под нее не выделяется, существует лишь сам факт связи между двумя этими переменными. Другими словами 2 эти переменные существуют как одно целое - тобешь одна переменная, в этом то и есть суть жестких ссылок. Так что тут все работает как и должно быть) Если вы хотите иметь возможность изменять значения ссылочных переменных, вам следует обратить внимание на символьные ссылки, хотя честно говоря я в этой теме не особо разбираюсь, т.к. вообще не пользуюсь ими)
0
-30 / 8 / 1
Регистрация: 31.05.2013
Сообщений: 485
23.08.2014, 17:39  [ТС]
Да, но как бы я понимаю, что "настоящей" переменной остается $a, а $b отображает ее значение.
$a = 'Text';
$b = &$a ;

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

Не по теме:

Цитата Сообщение от 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 секунды
Как работают ссылки в PHP
0
 Аватар для |VoroN|
13 / 13 / 11
Регистрация: 24.04.2011
Сообщений: 109
23.08.2014, 18:47
Ну, 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.08.2014, 18:47
Помогаю со студенческими работами здесь

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

Что делать с переменными, объявленными как globals?
Есть старый кривой скрипт с переменными, объявленными как globals, который не работает. Каким способом поправить это дело, не включая...

Объясните принцип действия foreach: что происходит с переменными
Интересует такой вопрос - когда мы пишем что то наподобее foreach(var a in results), можем ли мы через переменную &quot;a&quot; изменять...

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

Решение системы нелинейных уравнений с 3 переменными (или как понять что решения не существует)
Добрый день, такая проблема, есть система нелинейных уравнений, в матлабе пытался решить но каждый раз выдает ошибку. Системы выглядит...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru