The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"ПХПшные референсы"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы WEB технологии (Public)
Изначальное сообщение [Проследить за развитием треда]

"ПХПшные референсы"
Сообщение от mirya emailИскать по авторуВ закладки on 11-Сен-04, 15:04  (MSK)
может кто-то из пхп-интерналистов объяснить, как референсы работают? Я тут голову себе морочил пол-часа, пока понял, что схема значительно страшнее и запутанней жавской. Примеры:

<!-- 1 -->
<?php
$i = array('foo');
$j = &$i;
#unset($i);
$i = array('ku');
print_r($j);
?>

печатает array('ku') . Аналогично для классов. Я считал, что все объекты в ПХП есть умные указатели, операция =& копирует указатель, т.е. по идее $i есть указатель на массив, он копируется в $j, затем в $i загоняется новый указатель (что и должен делать new во всех нормальных языках). Оказалось, нет...


  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "ПХПшные референсы"
Сообщение от mirya emailИскать по авторуВ закладки on 11-Сен-04, 15:08  (MSK)
да, чуть не забыл: 4.3.6
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "ПХПшные референсы"
Сообщение от MeLLowD Искать по авторуВ закладки(ok) on 15-Сен-04, 15:55  (MSK)
http://www.php.net/manual/ru/language.variables.php


  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "ПХПшные референсы"
Сообщение от mirya emailИскать по авторуВ закладки on 15-Сен-04, 19:08  (MSK)
>http://www.php.net/manual/ru/language.variables.php
[excuses for my English, got problmes with ru kbd map]

everybody read it but it doesn't explain the script behaviour. Looks like PHP uses java-like references frontend, but pointers-style backend, e.g. there's more than one level of references

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "ПХПшные референсы"
Сообщение от MeLLowD Искать по авторуВ закладки(ok) on 16-Сен-04, 12:27  (MSK)
What do you expect from the script in first post? $j variable just points to $i. As manual says about references:
"References in PHP are a means to access the same variable content by different names. They are not like C pointers, they are symbol table aliases. Note that in PHP, variable name and variable content are different, so the same content can have different names. The most close analogy is with Unix filenames and files - variable names are directory entries, while variable contents is the file itself. References can be thought of as hardlinking in Unix filesystem."


  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "ПХПшные референсы"
Сообщение от mirya emailИскать по авторуВ закладки on 16-Сен-04, 16:46  (MSK)
>What do you expect from the script in first post? $j variable
>just points to $i.

I expect both $i and $j to be one-level references, though any constructor (new Object(), or internal like array()) puts a pointer (a reference to another table entry) into the variable. As you see, $j is a pointer to $i and $i is a pointer to an array, so we've got 2 levels of pointers. Strange thing, isn't it?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "ПХПшные референсы"
Сообщение от MeLLowD Искать по авторуВ закладки(ok) on 16-Сен-04, 16:58  (MSK)
Look at your code example:
<?php
$i = array('foo'); //initializing varibale $i
$j = &$i;          /* passing value of $i to $j by reference (same variable contnetn by different name) In other words PHP references allow you to make two variables to referto the same content. */
#unset($i);  
$i = array('ku');  // setting new value to $i
print_r($j);       /* printing $j, but $j points to CONTENT of $i and tent of $i has changed */
?>
If you familar with unix file system and hard linking, you should be clear about references in PHP. It's not Java, it's scripting language :)
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру