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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Организация работы с памятью в PHP

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Ссылки и переменные
avtor.fox
Отправлено: 16 Марта, 2013 - 14:32:15
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




Выделено в отдельную тему из темы "Минимальные значения из двумерного массива"
EuGen, спасибо за разъяснения.
Да, нужно исправляться.

А можно к Вам вопрос?
Плохой ли тон, работать с несуществующей переменной по ссылке?

armancho7777777, печаль. Исходники никто не портит.
И присмотритесь на второй вариант в моём первом сообщении.
 
 Top
EuGen Администратор
Отправлено: 16 Марта, 2013 - 14:44:39
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Выделено в отдельную тему из темы "Минимальные значения из двумерного массива"
avtor.fox пишет:
Плохой ли тон, работать с несуществующей переменной по ссылке?

Для начала поясните, что Вы имеете ввиду. (Я догадываюсь, о чём речь, но, если Вы приведете детали, я думаю, Вы сами ответите на свой вопрос)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
avtor.fox
Отправлено: 16 Марта, 2013 - 14:55:09
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




Выделено в отдельную тему из темы "Минимальные значения из двумерного массива"
EuGen, обращение к элементу по жёсткой ссылке.
Так как обращение у несуществующим объектам невозможно, они создаются автоматически.
Спасибо Улыбка
 
 Top
EuGen Администратор
Отправлено: 16 Марта, 2013 - 14:59:06
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Выделено в отдельную тему из темы "Минимальные значения из двумерного массива"
avtor.fox пишет:
обращение к элементу по жёсткой ссылке.

Имеется ввиду, например, индекс массива? Строго говоря, ничего плохого с точки зрения языка в этом нет. Я, впрочем, предпочитаю всегда контролировать такие ситуации с помощью isset и/или array_key_exists. Почти всегда, если логика алгоритма верна, работать с несуществующими элементами не придется - ведь всегда можно проверить существование (и, если элемент не существует, принять некоторое решение).
"Жесткая ссылка" через амперсанд - это как раз то, о чем я надеялся, Вы сами догадаетесь (то есть в контексте данного вопроса, что именно происходит с такими ссылками при "несуществовании" целевого элемента)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
avtor.fox
Отправлено: 16 Марта, 2013 - 15:16:06
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




Выделено в отдельную тему из темы "Минимальные значения из двумерного массива"
EuGen пишет:
Имеется ввиду, например, индекс массива?

И например при обращении к несуществующей переменной она также создастся.
А вот конкретно в замыканиях -

PHP:
скопировать код в буфер обмена
  1. $e = function($v) use (&$r)
  2. {
  3.         $r = range(0, 7);
  4. };
  5. $e(3);
  6. print_r($r);


Нет нет, я не про ключи (индексы) массива, а именно про передачу объекта по "жёсткой ссылке" через амперсанд в замыканиях.
Я уже понял что объект создастся и ошибки никакой не будет.
 
 Top
EuGen Администратор
Отправлено: 16 Марта, 2013 - 15:19:17
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Выделено в отдельную тему из темы "Минимальные значения из двумерного массива"
В Вашем случае произошло просто создание переменной в глобальном контексте (оттуда она передается в use потому что). Представьте себе более интересный случай (попробуйте ответить без исполнения):


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
avtor.fox
Отправлено: 16 Марта, 2013 - 15:23:45
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




Выделено в отдельную тему из темы "Минимальные значения из двумерного массива"
$bar является ссылкой на $foo, по этому при обращении к $bar мы получим (блин, NULL)?
(Добавление)
Я оказался не прав.
Получается что $bar является копией $foo, но с указателем на неё?
(Добавление)
Прочитал статью и моё сознание в данном вопросе стало ясным.
Как оказалось, ссылающиеся переменные всего лишь работают со значением (назовём её родителем). При удалении родителя, его значение не удаляется если на него ссылаются другие переменные. При полном отсутствии переменных, которые привязаны "жёсткими ссылками", значение родителя удаляется.

Спасибо, EuGen Улыбка

(Отредактировано автором: 16 Марта, 2013 - 16:05:43)

 
 Top
LIME
Отправлено: 16 Марта, 2013 - 16:09:50
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Выделено в отдельную тему из темы "Минимальные значения из двумерного массива"
avtor.fox пишет:
При полном отсутствии переменных, которые привязаны "жёсткими ссылками", значение родителя удаляется.
нет...просто становится недоступным(ну а как?)))
ячейка памяти помечается свободной уже сборщиком мусора
 
 Top
EuGen Администратор
Отправлено: 16 Марта, 2013 - 16:15:40
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Выделено в отдельную тему из темы "Минимальные значения из двумерного массива"
Работа с переменными и памятью в php можно описать одной фразой: copy on write
Как только смысл этого будет ясен, абсолютно все вопросы отпадут.

выделено в новую тему


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
LIME
Отправлено: 16 Марта, 2013 - 16:18:32
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




а какое отношение отложенное копирование к удалению?
 
 Top
LIME
Отправлено: 16 Марта, 2013 - 16:18:49
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Перенесено из темы "Минимальные значения из двумерного массива"
а какое отношение отложенное копирование к удалению?
(Добавление)
вынесли что-ли тему?
 
 Top
armancho7777777 Супермодератор
Отправлено: 16 Марта, 2013 - 16:26:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




avtor.fox пишет:
Исходники никто не портит.

Пардон, не на ту переменную глянул.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB