Dzięki, masz rację. Zdecydowanie nie jest to tak łatwe ani szybkie, jak coś wbudowanego. Możesz kopiować i wklejać, jeśli to ułatwi: D
Aaron,
7
Jeśli coś jest, !emptyto też zawsze isset, nie ma potrzeby tego podwójnego sprawdzania. Ponadto, ponieważ $chunkjest to wymagany parametr funkcji, musi zostać przekazany do funkcji, w przeciwnym razie PHP będzie narzekać. Oznacza to, że to sprawdzenie można skrócić do if ($chunk)(aby sprawdzić, czy jest fałszywe, czyli „puste”). Ale jeśli $chunknic nie zawiera, i tak nic się nie stanie. Zatem cała ta część funkcji może być skrócona do return $string . $chunk. Co oznacza, że cała ta funkcja jest dość niepotrzebna.
deceze
1
Możesz ustawić zmienną, ale także być pustą. Na przykład zmienna o wartości „” jest pusta, ale również ustawiona.
Aaron,
1
Tak, ale mówię, że twoja funkcja jest bardzo rozwlekłym sposobem pisania $foo . $bar. Wzywam cię do znalezienia każdej ważnej sprawy, w której twoja funkcja robi coś innego. :)
deceze
3
Wiem, że zadawano to pytanie / udzielono odpowiedzi jakiś czas temu, ale udzielam tej odpowiedzi, ponieważ jest ona równoważna funkcjonalnie, mimo że nie jest operatorem przypisania i nikt nie skomentował jej użycia do ogólnej konkatenacji ciągów.
Możesz przyjrzeć się zastosowaniu rodziny funkcji sprintf( dokumentacji ) do konkatenacji ciągów. Zapewnia o wiele więcej oczyszczania i użyteczności niż zwykłe połączenie dwóch ciągów z operatorami przypisania.
Niestety nie sądzę, że sprintf () jest tak szybki jak proste konkatacje. I z pewnością nie wydaje się też tak przyjazny dla składni. Zobacz: stackoverflow.com/q/7147305/2430549
HoldOffHunger
Prawidłowo, choć nie jestem pewien, co rozumiesz przez przyjazną składnię. Chociaż nie jest tak szybka ani uproszczona jak konkatenacja. sprintfjest powszechnie używany w wielu językach. sprintfma swoje miejsce i cel, kiedy go używać. na przykład. rzutowanie wielu wartości lub wymuszanie wielu danych wejściowych przy użyciu sprintfzapewnia większą funkcjonalność niż zwykła konkatenacja, gdy jest to wymagane . Zobacz: 3v4l.org/8PWil Ale nie powinno być używane jako kompletny zamiennik konkatenacji.
fyrye
3
Możesz zawinąć wbudowaną funkcję substr_replace, w której argumenty $ start i $ length można ustawić na 0, co poprzedza zamianę $ na ciąg znaków $ i zwraca wynik, na przykład:
function prepend(& $string, $prefix){
$string = substr_replace($string, $prefix,0,0);}
Przykładowym zastosowaniem funkcji pomocniczej byłoby:
Nie widzę zainteresowania używaniem substr_replace; zrobienie prostego $string = $prefix.$string;w funkcji załatwi sprawę.
Pierre-Olivier Vares
2
Przechodząc komentarz Blakethepatton jest na odpowiedź (dziękuję), sposób to zrobić bardziej starannie dłużej nazw zmiennych jest za pomocą odwołania do zmiennej w następujący sposób:
$f =&$foo; $f ="bar{$f}";
Pozwoli to zaoszczędzić Ci wpisywania odpowiedzi Erica V, jeśli oryginalna nazwa zmiennej ma 12 znaków lub więcej.
$foo
do$bar
, zamiast poprzedzenie$bar
do$foo
. Wynik jest podobny, ale myślę, że chce mutować$foo
.Odpowiedzi:
Nie. Ale możesz to zrobić
źródło
Zawsze możesz stworzyć własną funkcję do tego:
$string
byłby fragmentem, który chcesz wstawić na początku, i$chunk
tekstem, do którego chcesz coś dołączyć.Można powiedzieć, że kontrole są opcjonalne, ale mając je w sobie, nie musisz się martwić o przypadkowe przekazanie wartości zerowej.
źródło
!empty
to też zawszeisset
, nie ma potrzeby tego podwójnego sprawdzania. Ponadto, ponieważ$chunk
jest to wymagany parametr funkcji, musi zostać przekazany do funkcji, w przeciwnym razie PHP będzie narzekać. Oznacza to, że to sprawdzenie można skrócić doif ($chunk)
(aby sprawdzić, czy jest fałszywe, czyli „puste”). Ale jeśli$chunk
nic nie zawiera, i tak nic się nie stanie. Zatem cała ta część funkcji może być skrócona doreturn $string . $chunk
. Co oznacza, że cała ta funkcja jest dość niepotrzebna.$foo . $bar
. Wzywam cię do znalezienia każdej ważnej sprawy, w której twoja funkcja robi coś innego. :)Wiem, że zadawano to pytanie / udzielono odpowiedzi jakiś czas temu, ale udzielam tej odpowiedzi, ponieważ jest ona równoważna funkcjonalnie, mimo że nie jest operatorem przypisania i nikt nie skomentował jej użycia do ogólnej konkatenacji ciągów.
Możesz przyjrzeć się zastosowaniu rodziny funkcji
sprintf
( dokumentacji ) do konkatenacji ciągów. Zapewnia o wiele więcej oczyszczania i użyteczności niż zwykłe połączenie dwóch ciągów z operatorami przypisania.Zwykle używam
vsprintf
, ponieważ praca z tablicami jest łatwiejsza do zarządzania pozycjami wartości niż pojedynczymi argumentami.Również w przypadku tablicy wartości można po prostu uzyskać
implode
wynikowy zestaw wartości dla prostej konkatenacji ciągów.źródło
sprintf
jest powszechnie używany w wielu językach.sprintf
ma swoje miejsce i cel, kiedy go używać. na przykład. rzutowanie wielu wartości lub wymuszanie wielu danych wejściowych przy użyciusprintf
zapewnia większą funkcjonalność niż zwykła konkatenacja, gdy jest to wymagane . Zobacz: 3v4l.org/8PWil Ale nie powinno być używane jako kompletny zamiennik konkatenacji.Możesz zawinąć wbudowaną funkcję
substr_replace
, w której argumenty $ start i $ length można ustawić na 0, co poprzedza zamianę $ na ciąg znaków $ i zwraca wynik, na przykład:Przykładowym zastosowaniem funkcji pomocniczej byłoby:
To znaczy, jeśli interesujesz się programowaniem proceduralnym.
źródło
$string = $prefix.$string;
w funkcji załatwi sprawę.Przechodząc komentarz Blakethepatton jest na odpowiedź (dziękuję), sposób to zrobić bardziej starannie dłużej nazw zmiennych jest za pomocą odwołania do zmiennej w następujący sposób:
Pozwoli to zaoszczędzić Ci wpisywania odpowiedzi Erica V, jeśli oryginalna nazwa zmiennej ma 12 znaków lub więcej.
Alternatywa w jednej linii:
źródło