Zastanawiam się, jaki jest właściwy sposób wstawiania zmiennych PHP do łańcucha?
Tą drogą:
echo "Welcome ".$name."!"
Lub w ten sposób:
echo "Welcome $name!"
Obie te metody działają w moim przypadku PHP v5.3.5
. Ta ostatnia jest krótsza i prostsza, ale nie jestem pewien, czy ta pierwsza jest lepsza do formatowania czy zaakceptowana jako bardziej odpowiednia.
php
string
variables
concatenation
Projektant stron internetowych
źródło
źródło
echo 'Welcome '.$name.'!';
Odpowiedzi:
Pomiędzy tymi dwiema składniami powinieneś naprawdę wybrać tę, którą wolisz :-)
Osobiście wybrałbym twoje drugie rozwiązanie w takim przypadku (interpolacja zmienna) , które łatwiej mi zarówno pisać, jak i czytać.
Wynik będzie taki sam; i nawet jeśli występują implikacje dotyczące wydajności, nie będą miały znaczenia 1 .
Jako sidenote, więc moja odpowiedź jest nieco bardziej kompletna: dzień, w którym będziesz chciał zrobić coś takiego:
PHP zinterpretuje kod tak, jakbyś próbował użyć
$names
zmiennej - która nie istnieje. - zwróć uwagę, że zadziała tylko wtedy, gdy użyjesz „” not ”dla swojego łańcucha.Tego dnia musisz użyć
{}
:Nie trzeba wracać do konkatenacji.
Zauważ też, że twoja pierwsza składnia:
Prawdopodobnie można go zoptymalizować , unikając konkatenacji, używając:
(Ale, jak powiedziałem wcześniej, nie ma to większego znaczenia ...)
1 - Chyba że robisz setki tysięcy konkatenacji kontra interpolacje - i prawdopodobnie nie jest tak do końca.
źródło
{}
.echo
, ale nigdzie indziej.time php -r '$string=""; for ($i=0;$i<199999;$i++){ $string = $string.$i; } print("Done!\n");'
(konkatenacja) faktycznie traci około 300 milisekund (dla 200 000 przedmiotów, to 1 miliseconf na tysiąc elementów w zestawie ...). To szum statystyczny, nie można nawet zmierzyć żadnej różnicy. Biorąc pod uwagę, że jest bardziej czytelny,time php -r '$string=""; for ($i=0;$i<199999;$i++){ $string = "{$string}{$i}"; } print("Done!\n");'
(Interpolacja) jest niekwestionowanym zwycięzcą ...Ciągi cudzysłowów są bardziej eleganckie, ponieważ nie trzeba ich rozbijać za każdym razem, gdy trzeba wstawić zmienną (tak jak w przypadku ciągów cudzysłowów).
Jeśli jednak musisz wstawić wartość zwracaną przez funkcję, nie można jej wstawić do ciągu podwójnego cudzysłowu - nawet jeśli otoczysz ją nawiasami klamrowymi!
źródło
$x = function() { ...}; $string = "hello {$x(blah blah blah)}"
, która działa wokół „ograniczenia”.$x = 'trim'; $string = "hello {$x('blah blah blah')}";
$s = 'Hello ' . trim($world) .'!';
Spróbuj użyć pojedynczych cudzysłowów, gdy nie ma nic do interpolacji w ciągu. Poprawi to wydajność i może być użyte jako konwencja do identyfikacji obuOd php4 możesz używać formatera ciągów znaków:
Źródło: sprintf ()
źródło
Każdy z nich jest w porządku. Użyj tego, który ma dla Ciebie lepszą widoczność. Mówiąc o widoczności, możesz także sprawdzić printf .
źródło
Z punktu widzenia tworzenia myśli jest proste , czytelne , spójne i łatwe do zrozumienia (ponieważ wydajność nie ma tutaj znaczenia):
Używanie osadzonych zmiennych w podwójnych cudzysłowach może prowadzić do skomplikowanych i mylących sytuacji, gdy chcesz osadzić właściwości obiektów, tablice wielowymiarowe itp. Oznacza to, że generalnie podczas czytania osadzonych zmiennych nie możesz być natychmiast w 100% pewien ostatecznego zachowania tego, co czytasz .
Często trzeba dodawać kule, takie jak
{}
i\
, które IMO wprowadza zamieszanie i czyni czytelność konkatenacji prawie równoważną, jeśli nie lepszą.Na przykład, gdy tylko chcesz zawinąć wywołanie funkcji wokół zmiennej var
htmlspecialchars($var)
, musisz przejść do konkatenacji.AFAIK, nie można osadzać stałych.
W niektórych szczególnych przypadkach „podwójne cudzysłowy z osadzaniem zmiennych” mogą być przydatne, ale ogólnie rzecz biorąc, wybrałbym konkatenację (stosowanie pojedynczych lub podwójnych cudzysłowów, gdy jest to wygodne)
źródło
Wiem, że to pytanie ma już wybraną odpowiedź, ale znalazłem ten artykuł, który ewidentnie pokazuje, że interpolacja łańcuchów działa szybciej niż konkatenacja. Może to być pomocne dla tych, którzy nadal mają wątpliwości.
źródło
Idź z pierwszym i użyj pojedynczych cytatów!
Jedyne sytuacje, kiedy należy użyć cudzysłowów, to kiedy trzeba
\r
,\n
,\t
! Koszty ogólne po prostu nie są warte użycia w żadnym innym przypadku.Powinieneś również sprawdzić konkatenację zmiennych PHP , phpbench.com, aby znaleźć pewne testy porównawcze różnych metod robienia rzeczy.
źródło
\r
,\n
a\t
ponieważ inne odpowiedzi nie zawierały tego fragmentu.To tylko kwestia gustu.
Używaj, co chcesz.
Najczęściej używam drugiego, ale to zależy.
Pozwól, że zasugeruję ci także dobry edytor, który podświetli zmienną wewnątrz łańcucha
źródło
Nie konkatenuj. To nie jest potrzebne, przecinki, ponieważ echo może przyjmować wiele parametrów
Jeśli chodzi o stosowanie pojedynczych lub podwójnych cudzysłowów, różnica jest znikoma, możesz wykonać testy z dużą liczbą ciągów znaków, aby sprawdzić je sam.
źródło
Powinieneś wybrać pierwszy. Nie mają żadnej różnicy, z wyjątkiem wydajności, pierwsza będzie szybka w porównaniu z drugą.
Jeśli zmienna w podwójnym cudzysłowie PHP zajmie trochę czasu na przeanalizowanie zmiennej.
Sprawdź to Pojedyncze cudzysłowy lub podwójne cudzysłowy dla zmiennego łączenia?
To kolejny przykład Czy istnieje korzyść w postaci pojedynczego cytatu vs podwójnego cytatu w PHP?
Nie rozumiem, dlaczego ta odpowiedź w powyższym linku została oceniona pozytywnie i dlaczego ta odpowiedź została przyjęta.
Tak jak powiedziałem to samo.
Możesz też na to spojrzeć
Co jest szybsze w PHP, pojedynczych lub podwójnych cudzysłowach?
źródło
Jeśli chcesz wykonać
SQL
polecenie, a twoje zmienne są elementami tablicy, nie powinieneś używać pojedynczych cudzysłowów wewnątrz[]
tablicy (tak jak to['']
:); na przykład, jeśli użyjesz tego ciągu jako polecenia SQL, otrzymaszserver error 500
:Prawidłowy ciąg to:
źródło
Wiem, że to stare pytanie, ale myślę, że ktoś musi wymienić wszystkie zalety i wady:
Lepsza składnia : to osobiste preferencje.
Wydajność : bez różnicy. Jak wielu wspomniało, podwójne cytowanie może być szybsze, jeśli zastosuje się nierealistycznie wiele zmiennych.
Lepsze wykorzystanie : Pojedyncza oferta (głównie). Jak powiedział @Khez z pojedynczego cudzysłowu można złączyć wszystko, nawet wywołań funkcji i zmiennych modyfikację, tak:
echo 'hi ' . trim($name) . ($i + 1);
. Jedyną rzeczą cudzysłów może zrobić apostrofu nie może zrobić, to wykorzystanie\n
,\r
,\t
i podobne.Czytelność : bez różnicy (mogą obowiązywać osobiste preferencje).
Zapisywalność / Ponowne zapisywanie / Debugowanie : W instrukcjach 1-liniowych nie ma różnicy, ale w przypadku wielu linii łatwiej jest komentować / odkomentować linie podczas debugowania lub pisania. Na przykład:
Mniej ucieczek : pojedynczy cytat. W przypadku pojedynczego cytatu musisz uciec tylko 2 znaki (
'
i\
). W przypadku podwójnego cudzysłowu musisz uciec 2 znaki ("
,\
) i 3 dodatkowe w razie potrzeby ($
,{
i}
).Mniej zmian : Pojedyncza wycena. Na przykład, jeśli masz następujący kod:
I musisz zwiększyć 1 do $ i, aby stało się podobne:
Ale w przypadku podwójnego cytatu musisz to zmienić:
do tego:
Wniosek : użyj tego, co wolisz .
źródło