Чтобы понять разницу работы функций empty(), isset(), is_null() нужно понять как хранит php переменные в памяти. Компьютерная память состоит из большого количества маленьких ячеек. В эти ячейки и записываются твои данные. Обращение к той или иной ячейке происходит при помощи идентификатора ячейки в памяти, её места.
На деле интерпретатор хранит связь между названием переменной и идентификатором ячейки в памяти. Мы же в свою очередь работаем с названием, вместо того чтобы самим запоминать идентификаторы ячеек, которые и без того, известны одному интерпретатору.
Когда мы присваиваем переменной значение в первый раз, интерпретатор выбирает ячейку в памяти, заносит туда наше значение и привязывает название переменной к определенному идентификатору.
Когда к названию переменной соответствует ячейка в памяти, переменная считается определенной и isset() вернет true.
Empty() означает что содержимое ячейки является числом ноль, строкой нулевой длины или вовсе отсутствует.
Значение Null сбрасывает привязку названия переменной к ячейке в памяти и переменной больше не соответствует никакая ячейка. Переменная просто никуда не указывает и ни к чему не ведет. В этом случае переменная считается неопределенной,
isset вернет false, а вот is_null вернет true, так как название есть а привязка к ячейке отсутствует.
Когда в вызове функции переходит передача переменной по ссылке происходит передача идентификатора ячейки, а не значения. Когда ты вызываешь функцию func($a) интерпретатор в первую очередь достает из памяти значение переменной $a и передает это значение в функцию. После этого в самой функции создается новая переменная которой присваивается это значение.
Когда функция вызывается с параметром по ссылке func(&$a) интерпретатор передает в функцию не значение переменной, а идентификатор ячейки в памяти
При вызове функции с параметрами обычным способом все изменения происходят в другой, новой ячейке памяти и за пределами функции работа продолжается со старой ячейкой. А при передаче по ссылке все изменения происходят в той же ячейке и поэтому изменения видны и из вне самой функции.
Добавлено в Урок № 3 и Урок № 1
|