<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру

PHP и MySQL с Нуля до Гуру

Данный курс - это более 20-ти часов видеоуроков по изучению PHP и MySQL. Ключевой момент курса - это создание движка для сайта с нуля. Каждая строчка комментируется. Практически для каждого урока имеются упражнения. Причём данные упражнения направлены не только на закрепление материала, но и на реализацию реальных задач, встающих перед Web-разработчиками при создании сайтов. После курса Вы сможете без проблем создавать движки для любых сайтов.

Также почти к каждому уроку идут упражнения для закрепления материала.

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

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Ссылочные переменные PHP

Ссылочные переменные PHP

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

Начнём с первого типа ссылочных переменных - жёсткие ссылки. Жёсткая ссылочная переменная - это синоним другой переменной:

<?php
  $a = 5;
  $b = &$a;
  $a = 8;
  echo $b;
?>

Теперь объясняю, что здесь написано. Вначале мы создаём переменную a, которой присваиваем значение 5. Дальше мы создаём жёсткую ссылку b на переменную a. Затем изменяем переменную a. И ввиду того, что b - это синоним a, у нас изменяется и b тоже. То есть значение одно, а переменных, ссылающихся на это значение, две.

Теперь очень важное правило: "Переменная существует до тех пор, пока на неё ссылается хотя бы одна ссылка". То есть пока мы не удалим все ссылки на ячейку памяти, в которой хранится значение, наша память не освободится. Например, чтобы избавиться от переменной в примере выше необходимо написать следующие строки:

unset($a);
unset($b);

Только после этих строк переменная исчезнет.

Переходим ко второму типу (и последнему) ссылочных переменных в PHP, к символическим ссылкам. Символическая ссылка - это переменная, которая содержит строковое значение с именем другой переменной. Советую вдуматься в это определение, чтобы стало понятно. И сразу пример:

<?php
  $a = 17.1;
  $b = "a";
  echo $$b;
?>

В результате, как не трудно догадаться, вылезет число "17.1". Обратите внимание, что мы использовали конструкцию из двух знаков "$". Такая конструкция добирается до значения переменной, на которую ссылается символическая ссылка.

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

Теперь объясняю, почему без знания жёсткой ссылочной переменной невозможно пользоваться справочником, а, следовательно, невозможно писать скрипты на языке PHP. Давайте с Вами разберём пример одной из функций. Допустим, функция sort(array &$array), которая принимает в качестве параметра массив. А на выходе сортирует его. Встаёт вопрос: "Как работает данная функция?" То ли она принимает массив, сортирует его и возвращает, при этом аргумент никак не изменяется (то есть исходный массив не меняется вообще). То ли именно аргумент меняется и в итоге, новый массив не возвращается, а изменяется конкретно сам массив, который мы передали, тем самым, теряя исходный массив. Вдумайтесь в эти строки.

Для того, чтобы ответить на этот вопрос, надо посмотреть, что передаётся в аргумент: просто переменная, и тогда исходный массив никак не изменяется, или же всё-таки передаётся жёсткая ссылка на переменную, тогда, разумеется, исходный массив изменится. В параметрах функции sort(array &$array) чётко указано, что передаётся жёсткая ссылка (&$array), о чём свидетельствует знак "&", поэтому изменится исходный массив $array.

Надеюсь, я Вам доказал, что знание ссылочных переменных в PHP, а особенно жёстких ссылочных переменных, обязательно. И очень надеюсь, что Вы разобрались с этой, в общем-то, непростой темой.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (6):

volodya81 volodya81 04.03.2011 15:22:14

Добрый день! Подскажите пожайлуйста, как это работает: $k="title"; $v="Главная"; $$k = $v; echo $title; Тоесть, как получается так, что создается переменная $title?

Ответить

Admin Admin 04.03.2011 16:28:55

Да, создаётся переменная $title. То есть Вы задали имя будущей переменной в виде строки, которую сохранили в переменной $k. Но старайтесь избегать символических ссылок, так как они запутывают код.

Ответить

Daves Daves 26.02.2012 22:20:19

Немогу понять последние три обзаца данной статьи... Можете ли Вы,если Вас не затруднит, привести пример по проще?

Ответить

Admin Admin 26.02.2012 22:27:38

Посмотрите в справочнике функцию sort() и str_replace(), попробуйте их применить. И подумайте, в чём между ними отличие. Это отличие и происходит из-за ссылочных переменных.

Ответить

mixanik mixanik 22.08.2014 12:43:28

Михаил, поясните пожалуйста: "Переменная существует до тех пор, пока на неё ссылается хотя бы одна ссылка" После этого вы удаляете сначала переменную, потом ссылку на неё: unset($a); unset($b); Но ведь в соответствии с цитатой первая функция не удалит переменную a, потому что не удалена ссылка на неё. Я попробовал вывести переменную после её удаления - "переменной не существует". Но ссылка продолжает возвращать её значение, как будто переменную не удаляли. Что же в действительности происходит с переменной?

Ответить

Bagi Bagi 18.03.2016 07:14:20

Михаил можете объяснить, почему когда я пишу такой код: $a = 5; $b = &$a; $a = 8; echo $b; echo '<br>'; $a = 17.1; $b = "a"; echo $$b; То выводит "8" и "а", а должно вроде исходя из смысла вашей статьи выводить "8" и "17.1" ?

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.