@helixly

Использование $$ в PHP?

В исходных кода Битрикса наткнулся на такую штуку

if ($REQUEST_METHOD=="POST" && strlen($Update)>0)
{
	foreach($arAllOptions as $option)
	{
		$name = $option[0];
		$val = $$name;
		COption::SetOptionString("main", $name, $val);
	}
}


Код немного сократил, оставил саму суть. Тут происходит сохранение изменений из формы. В $option[0] хранится name инпута. Собственно я до этого сталкивался с переменными переменных и конструкцией $$, но не совсем понятно как образуется эта переменная. Например приходят такие данные
$_REQUEST["foo"] = "bar".
Получается что я могу вывести значение вот так:
echo $foo \\ выведет bar
Я конечно не так уж давно знаком с PHP, но вот с таким сталкиваюсь впервые. Подскажите пожалуйста это особенность языка, или это Битрикс где-то внутри создает такие переменные?
  • Вопрос задан
  • 484 просмотра
Решения вопроса 1
@strelov1
Да причем тут битрикс, это классический способ использования именованных переменных
$array = ['title'=>'TITLE','slug'=>'URL','contet'=>'CONTENT.....'];

foreach ($array as $key => $value) {
	$$key = $value;
}

echo $title; // TITLE
echo $slug; // URL
echo $contet; // CONTENT.....
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
AloneCoder
@AloneCoder
[object Object]
Комментировать
magalex
@magalex
Архитектор распределённых систем управления
Вы нашли абсолютно правильную "шутку" битрикса, это он "гадкий" :) создаёт такие переменные вот этой строчкой:
$val = $$name;
Ответ написан
Это переменные переменных, вот пример
<?
$first = "second";
$second = "third";
echo $first; //second
echo "\n";
echo $$first; //third
?>
Ответ написан
R0s0maxa
@R0s0maxa
junior web-developer
Классический пример таких штук
class Foo {
  public $deepest = 10;
  
  public function __toString()
  {
    return 'deep';
  }
}
$deeper = 'deepest';
$deep = 'deeper';
$b = new Foo();
echo $b->$$$b;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽