Всем привет Подскажите, никак не пойму: получаю строку в которой переменная $rr Код (Text): $tt=$sc->get('body')->value; $rr=7777; var_dump($tt); результат string(44) " {$rr} $rr ${rr}" переменная не подменяется, почему?
это друпал, достаю из ноды содержимое Код (Text): $sc=\Drupal::entityTypeManager()->getStorage('node')->load(16479); $tt=$sc->get('body')->value;
но все таки не пойму, чем эта строка так экранируется. вот например строка Код (Text): 'аарпапап <a href="/">'.$rr.'</a>счмс'.$rr.'чмчсмчс'; все работает и без eval а тут фиг string(29) " '.$rr.'".$rr.".${rr} "
Потому что переменные подставляются только в строковые константы. То, что уже сидит в переменной, оно там и будет сидеть
суть вот в чем: нужно сделать печать документов(счет, сч.ф, нак). Формы документов периодически меняются. Я делаю стандартный документ шаблоном. Соответственно его всегда можно изменить из админки. А что бы подставить в этот шаблон требуемые данные я в него ставлю переменные, например: ИНН/КПП продавца: $inn Когда происходит печать, дергается текущий документ и шаблон, и из текущего документа в шаблон подставляются значения. И результат печатается --- Добавлено --- Код (Text): $rr=7777; $tes='аарпапап <a href="/">'.$rr.'</a>счмс'.$rr.'чмчсмчс'; $tt=$sc->get('body')->value; $tt.=$tes; var_dump($tt); string(75) " $rr аарпапап 7777счмс7777чмчсмчс" в чем разница между $tes и $tt ? В $tes аналогичная строка что и в $tt
Суперстар, намек не понял. Как тут может помочь динамическая переменная? Мне нужно определенным в документе (в $rr строке $ee) переменным присвоить значение. Даже не догадываюсь как приладить сюда $$rr, намекните еще чуть чуть.
В том, что php - интерпретатор. В процессе обработки строки кода под цифрой 2 подставляется значение переменной, а в процессе обработки строки кода 3 - берётся просто готовая строка. Подумайте об использовании простейшей sprintf()...
Sail, понятно что дополнительными функциями этот вопрос решить можно. Мне просто принцип не понятен, почему одна строка обрабатывается php а другая нет....
Из-за двойных кавычек. Но это только при исполнении скрипта. Eval() может помочь. А $$ может и ни к чему, может меня сглючило.
Eval рабтает, но я все таки хочу уяснить, почему просто так не срабатывает. Пробовал разные вариации с кавычками, ничего не срабатывает Код (Text): $tes="аарпапап <a href=/>".$rr."</a>счмс".$rr."чмчсмчс"; $tt=$sc->get('body')->value; $tt.=$tes; $rr=8888; var_dump($tt); string(77) " ".$rr." аарпапап 8888счмс8888чмчсмчс"
Ещё раз. ПОдставлять значения переменных можно только в строковые константы Код (Text): <?php $a = 12; $b = "$a - это хорошо"; // Константа с подстановкой, всё сработает $c = '$a - это хорошо'; // Константа, но в одинарных кавычках. Подстановки не будет $d = $c; // Не константа. Не сработает function f() { global $c; return $c; } $e = f(); // Не константа, не сработает Конечно, название константа здесь не совсем корректно применять, но я не знаю, как это обозвать
Код (Text): $a = 12; $b = "$a - это хорошо"."\n"; // Константа с подстановкой, всё сработает $c = '$a - это хорошо'."\n"; // Константа, но в одинарных кавычках. Подстановки не будет $d = '$a - это'.$a.' хорошо'."\n"; // Константа, но в одинарных кавычках. + '.$a.' - все работает $e=$d; // все работает echo $b; echo $c; echo $d; echo $e; результат: 12 - это хорошо $a - это хорошо $a - это12 хорошо $a - это12 хорошо в моем случае строка, и никакие манипуляции типа '.$a.' ".$a." не работают. Строка не разрывается. Это конечно не проблема, но я хочу понять, почему?
строка делается на момент формирования строки. т.е. в той первой строчке уже она сляпается из тех значений переменных, что они имеют на тот момент, когда эта строка вычисляется. --- Добавлено --- а, я вспомнил безумный ход мысли с $$, но я не буду его озвучивать, т.к. он не требуется, можно обойтись ассоциативными массивами. короче суть в том, что ты можешь значения подменять по какому-то принципу, если не хочешь морочиться с eval(). Например подменять в строке %abc% на значение из массива по ключу abc.
вот теперь кажись понял, если строку собрать за пределами видимости функции, то без eval она уже не обработается, правильно?
тогда не пойму в чем разница между: $a=$sc->get('body')->value; $b=$rr echo $a echo $b вывод $rr пусто нижняя обрабатывается а верхняя нет
я не понял этого кода. $a, $b и $rr в данном случае никак между собой не связаны. На основании этого кода нельзя сказать как и что должно выводиться.
$a=$sc->get('body')->value; - в $a передается строка в которой содержится $rr $b=$rr - тут все понятно то есть и в $a и в $b содержится $rr echo $a $rr - так и выводится, как будто там '$rr' но при этом если вставить туда '.$rr.' то так и выводится '.$rr.' вместо того что бы разбить строку и обрабатываться как переменная echo $b пусто - ну переменной ничего не присваивается поэтому и пусто интерпретатор каким то образом отличает для себя эти две строки $a=$sc->get('body')->value; $b=$rr несмотря на то, что содержимое их идентично.
в это строке нет ничего про $rr, поэтому я не могу сделать такой вывод, поэтому дальнейшие рассуждения у меня не совпадают с твоими.
Ну полностью это так выглядит: загружается объект, из которого достается значение поля body - содержимое документа в виде строки. В содержимом в данном случае только $rr. Код (Text): $sc=\Drupal::entityTypeManager()->getStorage('node')->load(16479); echo $sc->get('body')->value; вывод echo: $rr
Не в то значение, которое функция возвращает, а только когда строка задана в двойных кавычках прямо в тексте программы. Олег, то, что ты мой код переделал, чтоб работало, ни о чём не говорит, я тебе специально показал случаи, в которых не работает, в том числе - при возврате из функции