Просто интересно, есть ли что-то вроде. = Для добавления текста в начало строки, например:
$foo =. 'bar';
что не работает.
Изменить: изначально был пример, $foo =. $bar;который может быть достигнут с помощью$bar .= $foo;
Просто интересно, есть ли что-то вроде. = Для добавления текста в начало строки, например:
$foo =. 'bar';
что не работает.
Изменить: изначально был пример, $foo =. $bar;который может быть достигнут с помощью$bar .= $foo;
$fooк $bar, а не добавляется $barк $foo. Результат похож, но я думаю, он хочет мутировать $foo.
Ответы:
Вы всегда можете создать для этого свою функцию:
function prepend($string, $chunk) {
if(!empty($chunk) && isset($chunk)) {
return $string.$chunk;
}
else {
return $string;
}
}
$stringбудет фрагментом, который вы хотите добавить $chunkв начало, и текстом, к которому вы хотите добавить что-то.
Вы могли бы сказать, что проверки необязательны, но, имея это там, вам не нужно беспокоиться о случайной передаче нулевого значения.
!emptyэто тоже всегда isset, нет необходимости в этой двойной проверке. Кроме того, поскольку $chunkэто обязательный параметр функции, его необходимо передать функции, иначе PHP пожалуется. Это означает, что эту проверку можно сократить до if ($chunk)(чтобы увидеть, является ли она ложной или «пустой»). Но, если $chunkничего не будет содержать, все равно ничего не произойдет. Таким образом, все тело функции может быть сокращено до return $string . $chunk. Это означает, что вся эта функция совершенно не нужна.
$foo . $bar. Я призываю вас найти любой важный случай, если бы ваша функция выполнялась иначе. :)
Я знаю, что это было задано / отвечено некоторое время назад, но я предоставил этот ответ, поскольку он функционально эквивалентен, несмотря на то, что он не является оператором присваивания, и никто не прокомментировал его использование для общей конкатенации строк.
Возможно, вы захотите изучить использование sprintf( документации ) семейства функций для конкатенации строк. Он обеспечивает гораздо большую дезинфекцию и удобство использования, чем просто объединение двух строк с операторами присваивания.
$foo = 'foo';
$append = sprintf('%1$s%2$s', $foo, 'bar');
var_dump($append);
/* string(6) "foobar" */
$prepend = sprintf('%1$s%2$s', 'bar', $foo);
var_dump($prepend);
/* string(6) "barfoo" */
$prependInvert = sprintf('%2$s%1$s', $foo, 'bar');
var_dump($prependInvert);
/* string(6) "barfoo" */
$wrap = sprintf('%2$s%1$s%2$s', $foo, 'bar');
var_dump($wrap);
/* string(6) "barfoobar" */
Я обычно использую vsprintf, так как работать с массивами легче управлять позициями значений, чем с отдельными аргументами.
$vprepend = vsprintf('%2$s%1$s', array('foo', 'bar'));
var_dump($vprepend);
/* string(6) "barfoo" */
Также с массивом значений можно просто получить implodeрезультирующий набор значений для простой конкатенации строк.
var_dump(implode('', array('bar', 'foo')));
/* string(6) "barfoo" */
sprintfобычно используется на нескольких языках. sprintfимеет свое место и цель, когда его использовать. например. приведение нескольких значений или принудительное использование нескольких входов sprintfпредоставляет вам больше функциональных возможностей, чем простая конкатенация, когда это необходимо . См .: 3v4l.org/8PWil. Но его не следует использовать как полную замену конкатенации.
Вы можете обернуть встроенную функцию substr_replace, где аргументы $ start и $ length могут быть установлены на 0, что добавляет $ замену к $ string и возвращает результат, например:
function prepend(& $string, $prefix) {
$string = substr_replace($string, $prefix, 0, 0);
}
Пример использования вспомогательной функции:
$email_message = "Jonathan";
$appropriate_greeting = "Dear ";
prepend($email_message, $appropriate_greeting);
echo $email_message;
Разумеется, если вы занимаетесь процедурным программированием.
$string = $prefix.$string;выполнение функции сделает свое дело.
Превратив комментарий Блейкетепаттона в ответ (спасибо), способ сделать это более аккуратно для более длинных имен переменных - это использовать ссылку на переменную следующим образом:
$f = &$foo; $f = "bar{$f}";
Это избавит вас от необходимости набирать ответ Эрика V, если исходное имя переменной составляет 12 символов или больше.
Альтернатива в одной строке:
$f = 'bar' . ($f = &$foo);