[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: $$ в пхп
Kasperskiy
Встретил вот такой кусок кода, что это означает, интересно в основном двойной знак доллара.


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




Спустя 5 минут, 5 секунд (25.04.2011 - 16:22) Nikitian написал(а):
Это значит....
Ой я и дурак (:

Спустя 17 минут, 37 секунд (25.04.2011 - 16:40) linker написал(а):
Нет. Здесь объявляются переменные, имена для которых будут служить названия ключей элементов массива. Сие велосипед для стандартной функции extract().

Спустя 1 минута, 27 секунд (25.04.2011 - 16:41) Kasperskiy написал(а):
$a = 5;
$variable = 'a';
echo $$variable; // 5

А почему пятёрка в результате на экран?

Спустя 1 минута, 39 секунд (25.04.2011 - 16:43) linker написал(а):
Kasperskiy
Мой пост выше.

Спустя 2 минуты, 19 секунд (25.04.2011 - 16:45) linker написал(а):
DySprozin
Этот код аналогичен записи
extract($vars);

Спустя 2 минуты, 10 секунд (25.04.2011 - 16:47) DySprozin написал(а):
пост удалил, ибо до меня уже ответили smile.gif

Спустя 39 секунд (25.04.2011 - 16:48) Kasperskiy написал(а):
Смотрите. Переменная variable была равна значению строковому а.
А как эта буква маленькая а, превратилась в переменную a в объявленную раннее?

Спустя 2 минуты, 36 секунд (25.04.2011 - 16:50) neadekvat написал(а):
Неужели вы реально еще не поняли?

$a = 5;
$var = 'a';
$$var - "переменная переменной", т.е. $($var) - $a = 5.

Спустя 7 минут, 16 секунд (25.04.2011 - 16:58) Kasperskiy написал(а):
А если три знака бакса написать что даст или что будет искаться в чём?

Спустя 1 минута, 1 секунда (25.04.2011 - 16:59) linker написал(а):
Ну подумай логически
$a = 5;
$variable = 'a';
echo $$variable;
у нас
$variable = 'a';
здесь
echo $$variable;
вместо $variable подставь её значение, т.е. 'a', т.е.
echo $'a';
или
echo $a;
, а $a у нас равно 5, поэтому на экране появляется 5.

Спустя 4 минуты, 19 секунд (25.04.2011 - 17:03) neadekvat написал(а):
linker, быть может, все-таки не все могут стать программистами? (здесь я не имел ввиду, что сам-то точно прирожден им быть)

Спустя 30 минут, 18 секунд (25.04.2011 - 17:33) Kasperskiy написал(а):
С этим вроде уяснил, а вот если три знака доллара будет, где тогда значение искаться будет?
Вот так не хочет.


$a = 5;
$b = 'a'
$variable = 'b';
echo $$$variable; // 5

Спустя 29 минут, 22 секунды (25.04.2011 - 18:03) Kasperskiy написал(а):
Если написать просто echo $clown; Хотя такой переменной не существует ничего на экран не выведется и ошибок не выдаст. Почему?

Спустя 3 минуты, 24 секунды (25.04.2011 - 18:06) DySprozin написал(а):
;;Вот так не хочет.
да.. мисьё знает толк в извращениях laugh.gif не хочет, потому что так нельзя - понятно? нету такой возможности в php rolleyes.gif

;;ничего на экран не выведется и ошибок не выдаст. Почему?
потому что это несерьезная ошибка. включить вывод ошибок php

Спустя 17 минут, 16 секунд (25.04.2011 - 18:23) neadekvat написал(а):
Цитата (DySprozin @ 25.04.2011 - 19:06)
потому что это несерьезная ошибка.

Имхо, это заблуждение. Оперирование необъявленными переменными порой приводит к очень сложно вылавливаемым ошибкам.

Спустя 5 минут (25.04.2011 - 18:28) Игорь_Vasinsky написал(а):
neadekvat
Цитата
Имхо, это заблуждение.


на том примере что он привёл - т.е. попытка вывода необъявленной переменной - он прав.

Спустя 1 минута, 25 секунд (25.04.2011 - 18:30) neadekvat написал(а):
Цитата (Игорь_Vasinsky @ 25.04.2011 - 19:28)
а том примере что он привёл - т.е. попытка вывода необъявленной переменной - он прав.

Автор спрашивает, что такое $$var и может ли быть $$$var. Ты действительно считаешь, что ему стоит говорить "обращение к необъявленой переменной - это не страшно"?

Спустя 18 минут, 9 секунд (25.04.2011 - 18:48) Игорь_Vasinsky написал(а):
Нет. Тут я с тобой согласен, в точносте с тем что в далнейшем это естестно приведёт к плохим последствием.

Спустя 1 минута, 20 секунд (25.04.2011 - 18:49) neadekvat написал(а):
Цитата (Игорь_Vasinsky @ 25.04.2011 - 19:48)
Нет. Тут я с тобой согласен, в точносте с тем что в далнейшем это естестно приведёт к плохим последствием.

Вот. Собственно, я бы на месте DySprozin сказал, что php не считает это серьезной ошибкой, а не то, что ситуация таковой не является.

Спустя 1 минута, 55 секунд (25.04.2011 - 18:51) DySprozin написал(а):
;;Имхо, это заблуждение.
хорошо, перефразирую для брюзг ( tongue.gif ) С точки зрения php эта ошибка считается несерьезной (Notice все-таки).

add
опередил))

Спустя 1 минута, 11 секунд (25.04.2011 - 18:52) neadekvat написал(а):
Цитата (DySprozin @ 25.04.2011 - 19:51)
хорошо, перефразирую для брюзг

Не пойдет. Надо еще добавить, что на самом деле это является причиной очень серьезный ошибок wink.gif

Спустя 2 часа, 26 минут, 27 секунд (25.04.2011 - 21:19) Kasperskiy написал(а):
РЕбята, заработало у меня.

$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

Спустя 21 минута, 37 секунд (25.04.2011 - 21:40) Kasperskiy написал(а):
В чём прикол такого использования. Даёт возможность значение использовать в качестве названия переменной, в этом основной прикол?

Спустя 1 минута, 34 секунды (25.04.2011 - 21:42) neadekvat написал(а):
Цитата (Kasperskiy @ 25.04.2011 - 22:40)
В чём прикол такого использования. Даёт возможность значение использовать в качестве названия переменной, в этом основной прикол?

Прикольный прикол, не правда ли?
Но категорически не советую использовать его особо активно. И дальше $$ не заходить точно. Я еще не встречал задачу, где бы было обязательно использование этой фичи.

Спустя 1 час, 59 минут, 47 секунд (25.04.2011 - 23:42) Kasperskiy написал(а):
Скажите, а в пхп такие же указатели как в С++ есть?
Ну например типа такого вывода.

#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 ?

Спустя 1 час, 31 секунда (26.04.2011 - 00:42) Kasperskiy написал(а):
Смотрите, в этом коде:


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

}


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


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

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

Спустя 7 часов, 48 минут, 12 секунд (26.04.2011 - 08:30) linker написал(а):
Цитата
Скажите, а в пхп такие же указатели как в С++ есть?

Очень похожее
$a = 'a';
echo $a; // Вывод 'a'
$b = &$a;
$b = 'b';
echo $a; // Вывод 'b'
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.