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 :: Версия для печати :: Тонкости, или слон по клумбам.. [2]
Форумы портала PHP.SU » PHP » Программирование на PHP » Тонкости, или слон по клумбам..

Страниц (2): « 1 [2]
 

16. Roler - 02 Мая, 2009 - 19:49:51 - перейти к сообщению
DeepVarvar
Вот чесслово, написал для себя cms и даже не задумывался особо в чём разница)
17. Stierus - 04 Мая, 2009 - 10:32:46 - перейти к сообщению
Roler, зря Улыбка
18. CodeWarrior - 07 Мая, 2009 - 10:58:48 - перейти к сообщению
Подобные вопросы автоматически отпадают когда хоть одним глазком заглядываешь в документацию по php, которая находится тут http://www.php.net/manual/ru/ А имеено в справочник функций...
19. Гость - 07 Мая, 2009 - 20:10:01 - перейти к сообщению
CodeWarrior Я понимаю что мануал это полезная вещь но всетаки не везде написан и не все знают что необъявленная переменная и переменная равная NULL это одно ито же
20. CodeWarrior - 08 Мая, 2009 - 15:55:17 - перейти к сообщению
JustUserR пишет:
переменная равная NULL это одно ито же

В самом этом предложении уже есть ответ на вопрос: в чем разница? А заглядывать в справочник на php.net - это первым делом...
21. valenok - 08 Мая, 2009 - 19:00:53 - перейти к сообщению
Чтобы понять разницу работы функций empty(), isset(), is_null() нужно понять как хранит php переменные в памяти. Компьютерная память состоит из большого количества маленьких ячеек. В эти ячейки и записываются твои данные. Обращение к той или иной ячейке происходит при помощи идентификатора ячейки в памяти, её места.

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

Когда мы присваиваем переменной значение в первый раз, интерпретатор выбирает ячейку в памяти, заносит туда наше значение и привязывает название переменной к определенному идентификатору.
Когда к названию переменной соответствует ячейка в памяти, переменная считается определенной и isset() вернет true.
Empty() означает что содержимое ячейки является числом ноль, строкой нулевой длины или вовсе отсутствует.

Значение Null сбрасывает привязку названия переменной к ячейке в памяти и переменной больше не соответствует никакая ячейка. Переменная просто никуда не указывает и ни к чему не ведет. В этом случае переменная считается неопределенной,
isset вернет false, а вот is_null вернет true, так как название есть а привязка к ячейке отсутствует.

Когда в вызове функции переходит передача переменной по ссылке происходит передача идентификатора ячейки, а не значения. Когда ты вызываешь функцию func($a) интерпретатор в первую очередь достает из памяти значение переменной $a и передает это значение в функцию. После этого в самой функции создается новая переменная которой присваивается это значение.

Когда функция вызывается с параметром по ссылке func(&$a) интерпретатор передает в функцию не значение переменной, а идентификатор ячейки в памяти
При вызове функции с параметрами обычным способом все изменения происходят в другой, новой ячейке памяти и за пределами функции работа продолжается со старой ячейкой. А при передаче по ссылке все изменения происходят в той же ячейке и поэтому изменения видны и из вне самой функции.

Добавлено в Урок № 3 и Урок № 1
22. Гость - 08 Мая, 2009 - 20:44:31 - перейти к сообщению
valenok ЫЫЫ интересно кто этого не знал Улыбка
Также добавлю что ваша теория сильно упрощена и я бы не сказал что каждой перменной $vrb присваивается конкретный участнок памяти ибо если это строка то это скорее всего char* переменной длины а так как в PHP свободная питизация данных то алгоритм конвертации это отдельная вещь
23. valenok - 08 Мая, 2009 - 23:20:23 - перейти к сообщению
конечно под каждую переменную выделяется совсем не один бит. О том, как разным типам данных выделяются разные сектора памяти можно почитать на википедии.
24. LONGMAN - 11 Мая, 2009 - 17:32:46 - перейти к сообщению
Можете дать точную ссылку на эту статью в вики
25. valenok - 11 Мая, 2009 - 18:41:18 - перейти к сообщению
На русском не смотрел, но там часто многое недописывают.
В Английской википедии должно быть что-то по запросам
Static memory allocation, Dynamic memory allocation и Automatic memory allocation
или что-то в этом роде. А вообще гугл должен что нибудь и сам выдать на запрос
распределение памяти.

 

Powered by ExBB FM 1.0 RC1