PHP-konkatenacja lub bezpośrednie wstawianie zmiennych w łańcuchu
Zastanawiam się, jaki jest właściwy sposób wstawiania zmiennych PHP do łańcucha znaków?
tędy.:
echo "Welcome ".$name."!"
Lub w ten sposób:
echo "Welcome $name!"
Obie te metody działają w moim PHP v5.3.5
. Ten ostatni jest krótszy i prostszy, ale nie jestem pewien, czy pierwszy jest lepszym formatowaniem, czy zaakceptowany jako bardziej właściwy. 11 answers
Pomiędzy tymi dwoma składniami, naprawdę powinieneś 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 istnieją implikacje wydajności, to nie będzie to miało znaczenia 1.
Na marginesie, więc moja odpowiedź jest nieco bardziej kompletna: dzień, w którym będziesz chciał zrobić coś takiego to:
echo "Welcome $names!";
PHP zinterpretuje Twój kod tak, jakbyś próbował użyć zmiennej $names
-- która nie istnieje.
Tego dnia będziesz musiał użyć {}
:
echo "Welcome {$name}s!"
Nie ma potrzeby wycofywania się do konkatenacji.
Zauważ również, że twoja pierwsza składnia:
echo "Welcome ".$name."!";
Może być prawdopodobnie zoptymalizowany, unikając konkatenacji, używając:
echo "Welcome ", $name, "!";
(ale, jak powiedziałem wcześniej, to nie ma większego znaczenia...)
1 - chyba, że jesteś wykonywanie setek tysięcy konkatenacji vs interpolacji. i to chyba nie do końca.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-25 17:30:56
Podwójnie cytowane łańcuchy są bardziej eleganckie, ponieważ nie musisz rozbijać łańcucha za każdym razem, gdy musisz wstawić zmienną(tak jak musisz to zrobić z pojedynczo cytowanymi łańcuchami).
Jednakże, jeśli musisz wstawić wartość zwracaną funkcji, nie można jej wstawić do podwójnego cudzysłowu-nawet jeśli otaczasz ją klamrami!
//syntax error!!
//$s = "Hello {trim($world)}!"
//the only option
$s = "Hello " . trim($world) . "!";
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-09 15:52:13
Oba są w porządku. Użyj tego, który ma lepszą widoczność dla Ciebie. A mówiąc o widoczności możesz również sprawdzić printf .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-21 14:45:09
Z punktu widzenia prostego myślenia , czytelny, spójny i Łatwy do zrozumienia (ponieważ wydajność nie ma tu znaczenia):
Używanie osadzonych var w podwójnych cudzysłowach może prowadzić do skomplikowanych i mylących sytuacji, gdy chcesz osadzać właściwości obiektów, wielowymiarowe tablice itp. Oznacza to, że zazwyczaj podczas czytania osadzonych VAR-ów nie możesz być natychmiast 100% pewien ostatecznego zachowania tego, kim jesteś czytam.
Często trzeba dodać kule, takie jak
{}
i\
, Co IMO dodaje zamieszanie i sprawia, że czytelność konkatenacji jest prawie równoważna, jeśli nie lepsza.Gdy tylko musisz zawinąć wywołanie funkcji wokół var, na przykład
htmlspecialchars($var)
, musisz przełączyć się na konkatenację.AFAIK, nie możesz osadzać stałych.
W niektórych szczególnych przypadkach" podwójne cudzysłowy z osadzaniem var " mogą być przydatne, ale ogólnie mówiąc, wybrałbym konkatenację (używając pojedynczych lub podwójnych cudzysłowów, gdy jest to wygodne)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-23 12:08:48
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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-13 23:20:17
Od php4 można użyć formatera łańcuchowego:
$num = 5;
$word = 'banana';
$format = 'can you say %d times the word %s';
echo sprintf($format, $num, $word);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-11 19:18:48
Idź z pierwszym i używaj pojedynczych cudzysłowów!
- jest łatwiejszy do odczytania, co oznacza, że inni programiści będą wiedzieć, co się dzieje
- to działa nieco szybciej, sposób, w jaki kod opcodes są tworzone, gdy PHP analizuje Twój kod źródłowy, w zasadzie i tak to zrobi, więc podaj mu pomocną dłoń!
- Jeśli używasz również pojedynczych cudzysłowów zamiast podwójnych, zwiększysz swoją wydajność jeszcze bardziej.
Jedynymi sytuacjami, w których powinieneś używać podwójnych cudzysłowów, są sytuacje, w których potrzebujesz \r
, \n
, \t
!
Nad głową po prostu nie warto go używać w żadnym innym przypadku.
Powinieneś również sprawdzić konkatenację zmiennej PHP, phpbench.com dla niektórych benchmarków na temat różnych metod robienia rzeczy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:20
To tylko kwestia gustu.
Używaj, co chcesz.
Większość czasu używam drugiego, ale to zależy.
Pozwól, że zasugeruję Ci również, abyś znalazł sobie dobry edytor, który podświetli zmienną wewnątrz łańcucha
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-09 15:48:10
Nie konkatenować. To nie jest potrzebne, my przecinki jako echo może przyjmować wiele parametrów
echo "Welcome ", $name, "!";
Jeśli chodzi o używanie pojedynczych lub podwójnych cudzysłowów, różnica jest znikoma, możesz wykonać testy z dużą liczbą ciągów, aby przetestować je samodzielnie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-09 16:00:04
Powinieneś wybrać pierwszą. Nie mają żadnej różnicy poza osiągami pierwszy będzie szybki w porównaniu z drugim.
Jeśli zmienna wewnątrz podwójnego cudzysłowu PHP zajmie trochę czasu, aby przeanalizować zmienną.
Sprawdź to pojedyncze cudzysłowy lub podwójne cudzysłowy dla zmiennej konkatenacji?
To jest kolejny przykład czy w php istnieje jedno cudzysłów z korzyścią dla wydajności w porównaniu z podwójnym cudzysłowem?
Nie rozumiałem dlaczego ta odpowiedź w wyżej link się upvoted i dlaczego ta odpowiedź dostał downvote.
Jak mówiłem to samo.
Możesz też zajrzeć tutaj
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:26
Wiem, że to stare pytanie, ale myślę, że ktoś musi wymienić wszystkie plusy i minusy: {]}
Lepsza składnia : to osobiste preferencje.
Wydajność : bez różnicy. Jak wielu już wspomniało, Double-quote może być szybszy, jeśli użyje nierealistycznie wielu zmiennych.
Lepsze wykorzystanie : pojedynczy cytat (głównie). Jak powiedział @Khez, za pomocą jednego cytatu można łączyć wszystko, nawet wywołania funkcji i modyfikacje zmiennych, jak tak: echo 'hi ' . trim($name) . ($i + 1);
. Jedyny rzeczą, która może zrobić podwójny cytat, że pojedynczy cytat nie może zrobić, jest użycie \n
, \r
, \t
i podobne.
Czytelność : bez różnicy (mogą mieć zastosowanie osobiste preferencje).
Możliwość zapisu/ponownego zapisu / debugowania: w instrukcjach 1-wierszowych nie ma różnicy, ale gdy mamy do czynienia z wieloma wierszami, łatwiej jest komentować / odkomentować wiersze podczas debugowania lub pisania. Na przykład:
$q = 'SELECT ' .
't1.col1 ' .
',t2.col2 ' .
//',t3.col3 ' .
'FROM tbl1 AS t1 ' .
'LEFT JOIN tbl2 AS t2 ON t2.col2 = t1.col1 ' .
//'LEFT JOIN tbl3 AS t3 ON t3.col3 = t2.col2 ' .
'WHERE t1.col1 = ' . $x . ' ' .
' AND t2.col2 = ' . $y . ' ' .
//' AND t3.col3 = ' . $z . ' ' .
'ORDER BY t1.col1 ASC ' .
'LIMIT 10';
Less Escaping : single-quote. W przypadku pojedynczego cytatu musisz escape 2 znaki tylko ('
i \
). Dla podwójnego cytatu musisz uciec 2 znaki ("
, \
) i 3 więcej w razie potrzeby ($
, {
i }
).
Mniej zmian : pojedynczy cytat. Na przykład, jeśli masz następujący kod:
echo 'Number ' . $i . '!';
I musisz zwiększyć 1 do $i, aby stało się to lajkami:
echo 'Number ' . ($i + 1) . '!';
Ale dla podwójnego cytatu, trzeba będzie zmienić to:
echo "Number $i!";
Do tego:
echo "Number " . ($i + 1) . "!";
Wniosek: Użycie co wolisz .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-26 12:14:03