Спасибо, но вы правы. Это определенно не так просто и быстро, как что-то встроенное. Не стесняйтесь копировать и вставлять, если это помогает облегчить задачу: D
Аарон
7
Если что-то есть, !emptyэто тоже всегда isset, нет необходимости в этой двойной проверке. Кроме того, поскольку $chunkэто обязательный параметр функции, его необходимо передать функции, иначе PHP пожалуется. Это означает, что эту проверку можно сократить до if ($chunk)(чтобы увидеть, является ли она ложной или «пустой»). Но, если $chunkничего не будет содержать, все равно ничего не произойдет. Таким образом, все тело функции может быть сокращено до return $string . $chunk. Это означает, что вся эта функция совершенно не нужна.
deceze
1
Вы можете установить переменную, но при этом быть пустой. Например, переменная со значением "" пуста, но также установлена.
Аарон
1
Да, но я говорю, что ваша функция - очень многословный способ написания $foo . $bar. Я призываю вас найти любой важный случай, если бы ваша функция выполнялась иначе. :)
deceze
3
Я знаю, что это было задано / отвечено некоторое время назад, но я предоставил этот ответ, поскольку он функционально эквивалентен, несмотря на то, что он не является оператором присваивания, и никто не прокомментировал его использование для общей конкатенации строк.
Возможно, вы захотите изучить использование sprintf( документации ) семейства функций для конкатенации строк. Он обеспечивает гораздо большую дезинфекцию и удобство использования, чем просто объединение двух строк с операторами присваивания.
К сожалению, я не думаю, что sprintf () так же быстр, как простые конкатенации. И это, конечно, не кажется таким дружественным к синтаксису. См .: stackoverflow.com/q/7147305/2430549
HoldOffHunger 09
Правильно, но не понимаю, что вы имеете в виду под синтаксисом. Хотя это не так быстро или упрощенно, как конкатенация. sprintfобычно используется на нескольких языках. sprintfимеет свое место и цель, когда его использовать. например. приведение нескольких значений или принудительное использование нескольких входов sprintfпредоставляет вам больше функциональных возможностей, чем простая конкатенация, когда это необходимо . См .: 3v4l.org/8PWil. Но его не следует использовать как полную замену конкатенации.
fyrye 09
3
Вы можете обернуть встроенную функцию substr_replace, где аргументы $ start и $ length могут быть установлены на 0, что добавляет $ замену к $ string и возвращает результат, например:
function prepend(& $string, $prefix){
$string = substr_replace($string, $prefix,0,0);}
Я не вижу интереса в использовании substr_replace; простое $string = $prefix.$string;выполнение функции сделает свое дело.
Пьер-Оливье Варес,
2
Превратив комментарий Блейкетепаттона в ответ (спасибо), способ сделать это более аккуратно для более длинных имен переменных - это использовать ссылку на переменную следующим образом:
$f =&$foo; $f ="bar{$f}";
Это избавит вас от необходимости набирать ответ Эрика V, если исходное имя переменной составляет 12 символов или больше.
$foo
к$bar
, а не добавляется$bar
к$foo
. Результат похож, но я думаю, он хочет мутировать$foo
.Ответы:
Нет. Но ты можешь сделать
источник
Вы всегда можете создать для этого свою функцию:
$string
будет фрагментом, который вы хотите добавить$chunk
в начало, и текстом, к которому вы хотите добавить что-то.Вы могли бы сказать, что проверки необязательны, но, имея это там, вам не нужно беспокоиться о случайной передаче нулевого значения.
источник
!empty
это тоже всегдаisset
, нет необходимости в этой двойной проверке. Кроме того, поскольку$chunk
это обязательный параметр функции, его необходимо передать функции, иначе PHP пожалуется. Это означает, что эту проверку можно сократить доif ($chunk)
(чтобы увидеть, является ли она ложной или «пустой»). Но, если$chunk
ничего не будет содержать, все равно ничего не произойдет. Таким образом, все тело функции может быть сокращено доreturn $string . $chunk
. Это означает, что вся эта функция совершенно не нужна.$foo . $bar
. Я призываю вас найти любой важный случай, если бы ваша функция выполнялась иначе. :)Я знаю, что это было задано / отвечено некоторое время назад, но я предоставил этот ответ, поскольку он функционально эквивалентен, несмотря на то, что он не является оператором присваивания, и никто не прокомментировал его использование для общей конкатенации строк.
Возможно, вы захотите изучить использование
sprintf
( документации ) семейства функций для конкатенации строк. Он обеспечивает гораздо большую дезинфекцию и удобство использования, чем просто объединение двух строк с операторами присваивания.Я обычно использую
vsprintf
, так как работать с массивами легче управлять позициями значений, чем с отдельными аргументами.Также с массивом значений можно просто получить
implode
результирующий набор значений для простой конкатенации строк.источник
sprintf
обычно используется на нескольких языках.sprintf
имеет свое место и цель, когда его использовать. например. приведение нескольких значений или принудительное использование нескольких входовsprintf
предоставляет вам больше функциональных возможностей, чем простая конкатенация, когда это необходимо . См .: 3v4l.org/8PWil. Но его не следует использовать как полную замену конкатенации.Вы можете обернуть встроенную функцию
substr_replace
, где аргументы $ start и $ length могут быть установлены на 0, что добавляет $ замену к $ string и возвращает результат, например:Пример использования вспомогательной функции:
Разумеется, если вы занимаетесь процедурным программированием.
источник
$string = $prefix.$string;
выполнение функции сделает свое дело.Превратив комментарий Блейкетепаттона в ответ (спасибо), способ сделать это более аккуратно для более длинных имен переменных - это использовать ссылку на переменную следующим образом:
Это избавит вас от необходимости набирать ответ Эрика V, если исходное имя переменной составляет 12 символов или больше.
Альтернатива в одной строке:
источник