Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   $$ доллар в ПХП (https://javascript.ru/forum/server/16854-%24%24-dollar-v-pkhp.html)

Kasperskiy 25.04.2011 17:21

$$ доллар в ПХП
 
Встретил вот такой кусок кода, что это означает, интересно в основном двойной знак доллара.

foreach($vars as $k=>$v){
  $$k = $v; //что здесь произошло, и что это за двойной бакс?
}

B@rmaley.e><e 25.04.2011 17:24

Проще всего пояснить на примере.
$a = 5;
$variable = 'a';
echo $$variable; // 5
Т.е. это обращение к переменной, чье значение хранится в variable в виде строки.

Kasperskiy 25.04.2011 17:33

А почему пятёрка в результате на экран?
Смотрите. Переменная variable была равна значению строковому а.
А как эта буква маленькая а, превратилась в переменную a в объявленную раннее?

Kasperskiy 25.04.2011 19:02

Если написать просто echo $clown; Хотя такой переменной не существует ничего на экран не выведется и ошибок не выдаст. Почему?

dmitriymar 25.04.2011 20:01

Цитата:

Сообщение от Kasperskiy
Переменная variable

это указатель на переменную а. а $$variable выведет значение переменной на какую указывает указатель

dmitriymar 25.04.2011 20:03

Цитата:

Сообщение от Kasperskiy
echo $clown;

ну как не существует? упомянув её,ты её инициализировал.
читай лучше учебник по рнр

Kasperskiy 25.04.2011 22:19

РЕбята, заработало у меня.
$a=5;$b='a';$c='b';$d='c';$e='d';$f='e';$g='f';$h='g';$i='h';$j='i';$k='j';$l='k';
$m='l';$n='m';$o='n';$p='o';$q='p';$r='q';$s='r';$t='s';$u='t';$v='u';$w='v';
$x='w';$y='x';$z='y';$variable='z';
echo $$$$$$$$$$$$$$$$$$$$$$$$$$$variable;


Результат на экран 5

Gvozd 25.04.2011 22:21

*рука-лицо*

monolithed 25.04.2011 22:37

Цитата:

Сообщение от Kasperskiy
РЕбята, заработало у меня.

если не ошибаюсь, то указатели в PHP имеют статут depricated и не войдут в PHP6 (если когда-то выйдет)

Kasperskiy 25.04.2011 22:39

В чём прикол такого использования. Даёт возможность значение использовать в качестве названия переменной, в этом основной прикол?

Gvozd 25.04.2011 22:48

Цитата:

Сообщение от monolithed
если не ошибаюсь, то указатели в PHP имеют статут depricated и не войдут в PHP6 (если когда-то выйдет)

пруф или не было.
может еще заодно отказаться от eval?
Цитата:

Сообщение от Kasperskiy
В чём прикол такого использования. Даёт возможность значение использовать в качестве названия переменной, в этом основной прикол?

ну, да.
хотя на практике такое использование редко, но иногда оно удобно

Kasperskiy 26.04.2011 00:41

Скажите, а в пхп такие же указатели как в С++ есть?
Ну например типа такого вывода.
Код:

#include <iostream>
#include <iomanip>
using namespace std;



int main(){
int a=100;  // переменная занимает 4 байта
int *p = &a;  // указатель, занимает 4 байта, хранит указатель на ячейку, где находится переменная a
int &r = a;  // ссылка, любое обращение к ней просто обращается к ячейке переменной a
cout<<p<<setw(5)<<r;
cin.get();
}

Результат:
Код:

0012FF60  100
Может сослаться на адрес этой переменной в оперативной памяти?
Вот это как в моём случаи 0012FF60 ?

Gvozd 26.04.2011 01:01

нет, в PHP нету указателей.
зато есть ссылки, и для него вполне хватает

Kasperskiy 26.04.2011 01:43

Смотрите, в этом коде:

class Proba{
var $name;
function d(){
$e = 'Привет мир!';
echo 'Результат = '.$this->name = 8; //УКАЗАТЕЛЬ this
}                                         //УКазатель но не ссылка ведь же
                                          //Значит есть указатели в ПХП?
}


$object = new Proba;
$object->d();


Теперь глянул вот сюда: http://php.su/learnphp/phpoo/?classes
Прочитал такое:
Код:

Чтобы получить доступ к членам класса внутри класса, необходимо использовать указатель $this,

Gvozd 26.04.2011 02:21

Цитата:

Сообщение от Kasperskiy
УКазатель но не ссылка ведь же

это ссылка, а не указатель.
Цитата:

Сообщение от Kasperskiy
Теперь глянул вот сюда: http://php.su/learnphp/phpoo/?classes
Прочитал такое:

на заборе также написано много чего.
читайте официальную документацию на офсайте PHP
например раздел посвященный ссылкам, да)
http://www.php.net/manual/en/language.references.php
а также кусок, где упоминается про $this в данном контексте
http://www.php.net/manual/en/languag...ences.spot.php

monolithed 26.04.2011 09:52

Цитата:

Сообщение от Gvozd
пруф или не было.

я имел ввиду указатели типа:

$foo = 1;
$bar =& $foo;
unset($foo);


Д.Гутманс писал о том, что указатели - анархизм и использование их не желательно...

Kolyaj 26.04.2011 10:02

Цитата:

Сообщение от monolithed
я имел ввиду указатели типа:

Это ссылки. Нет в PHP указателей.

dmitriymar 26.04.2011 10:20

во всей литературе что читал по рнр-авторы называли это указателем.хотя какие авторы такое и название)

Kolyaj 26.04.2011 10:22

Ссылка ссылается на значение, указатель указывает на область в памяти. PHP не работает с памятью, там не может быть указателей.

Gvozd 26.04.2011 11:44

Цитата:

Сообщение от monolithed
Д.Гутманс писал о том, что указатели - анархизм и использование их не желательно...

поведем речь все-таки об ссылках(код вы показываете про них, а указателей в пыхе все равно нету):
не согласен.
огромное количество встроенных функций базируется на передаче параметров по ссылке.
и это реально полезная вещь
хотя я что-то читал нехорошее про ссылки, что это противоречит парадигме(функция не должны изменять состояние контекста исполнения, и возвращать результат только через return). в качестве замены параметров по ссылке предлагалось использовать объекты, или же возвращать структуры. но как по мне, это излишняя борьба за чистоту кода.

в PHP же depricated являются подобные конструкции:
$a = & new A();

наврено потому что смысла в ссылке тут ноль для современного PHP

monolithed 26.04.2011 15:40

Цитата:

Сообщение от Kolyaj
Это ссылки. Нет в PHP указателей.

В классическом понимании указатель это не что иное, что есть в PHP (Reference), но суть то практически та же, потому что это все ссылочный тип.

int bar = 10;
int foo = &bar;
int baz = *foo;
cout << baz << endl; //10


Терминологическая путаница не более того.

Kolyaj 26.04.2011 15:45

Я повторюсь
Цитата:

Сообщение от Kolyaj
Ссылка ссылается на значение, указатель указывает на область в памяти.

И суть у этого разная. У указателей, например, есть своя арифметика. У ссылок её нет и быть не может.

monolithed 26.04.2011 16:54

Цитата:

Сообщение от Kolyaj
Я повторюсь

Я прекрасно понимаю что такое указатели. Я лишь хочу сказать, что те жесткие (&) и символические ссылки ($$), которые есть в PHP имеют некоторое сходство (достаточное чтобы появилась терминологическая путаница) с указателями.

Kolyaj 26.04.2011 17:03

$$ это вообще не ссылка в PHP, вы тут куда-то не туда пошли.

monolithed 26.04.2011 17:42

Цитата:

Сообщение от Kolyaj
$$ это вообще не ссылка в PHP, вы тут куда-то не туда пошли.

обманывают? :)

Kolyaj 26.04.2011 18:07

Трудности перевода?

monolithed 26.04.2011 18:17

Цитата:

Сообщение от Kolyaj
Трудности перевода?

ага. во всей русскоязычной литературе)).

Gvozd 26.04.2011 22:53

Цитата:

Сообщение от monolithed
ага. во всей русскоязычной литературе)).

именно из-за непрофесионализма в русских переводах, официальная документация больше не поддерживается на этом языке

dmitriymar 26.04.2011 23:00

а не застали совдеповские адаптации языков-типа рапира совдеп адаптация бейсика и т.д?

Gvozd 26.04.2011 23:27

нет, не застал.

dmitriymar 26.04.2011 23:43

по сравнению с этим шедевром начала 90х ,всего операторов на 25-30- переводы книг отдыхают))


Часовой пояс GMT +3, время: 04:52.