2010-07-23 6 views
19

Что лучше соединить переменную (скажем, $name) в существующую строку (скажем, $string), как это:Одиночные кавычки или двойные кавычки для переменной конкатенации?

$string='Hi, my name is '.$name 

или вставлять переменную в строку, как это:

$string="Hi, my name is $name"; 

или лучше использовать такую ​​функцию:

$string=sprintf("Hi, my name is %s",$name); 

что лучше с точки зрения времени процессора/эффективности ?

+0

Я бы сказал, что это зависит от того, откуда эти данные поступают ... вход пользователя или системный ввод – Prix

+0

Были ли различия в производительности? то есть больше времени процессора с каждым? – ina

+1

Возможный дубликат [PHP - «Sal's mall is $ emo» vs «Sal's mall is». $ Emo - строка с эффективностью конкатенации кавычек] (http://stackoverflow.com/questions/3394166/php-sals-mall-is -emo-vs-sals-mall-is-emo-string-with-quotes-concaten) –

ответ

25

Каждый, кто сделал тест, пришел к выводу, что использование одинарных кавычек незначительно улучшает качество работы. В конце одинарные кавычки приводят к простому конкатенации, в то время как двойные кавычки заставляют интерпретатор анализировать полную строку для переменных.

Однако добавленная нагрузка при этом настолько мала для последних версий PHP, что в большинстве случаев вывод заключается в том, что это не имеет большого значения.

Так что для людей производительности: используйте одинарные кавычки. Для «мне нравится мой читаемый код» - люди: двойные кавычки намного лучше для удобочитаемости, как уже указывал Флавиус Стеф.

Редактировать: Одна вещь: если вы собираетесь использовать один доллар в своей строке без переменной, используйте одинарные кавычки точно! (http://www.weberdev.com/get_example-3750.html указывает на то, что потребуется в 4 раза больше, чтобы разобрать эти строки)

+7

«все, кто сделал тест ...» источник данных? – ina

+1

http://classyllama.com/development/php/php-single-vs-double-quotes/ http://www.procata.com/blog/archives/2005/03/08/microbenchmarks-of-single- и-double-qouting/ Вот 2. google может дать вам еще много. – Blizz

+0

Я думаю, что тест даже не требуется. Это всего лишь вопрос о количестве инструкций процессора. Чем меньше у вас (что может быть легко угадано в этом случае), тем быстрее вы находитесь. – snowflake

0

Это не имеет значения с точки зрения синтаксиса. Оба варианта верны. Используйте то, что чувствуете себя более комфортно.

Лично я чувствую себя лучше при использовании $string="Hi, my name is $name", потому что вам не нужно возиться с кавычками. Просто изобразите сложный SQL-запрос, скажем, из 10 переменных ...

7

Я вообще чувствую, что использование строковой интерполяции ("Hi, my name is $name") лучше с точки зрения разборчивости.

0

PHP довольно медленно:

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-088-introduction-to-c-memory-management-and-c-object-oriented-programming-january-iap-2010/lecture-notes/MIT6_088IAP10_lec01.pdf

Slide # 3

Так что не слишком беспокоиться о мало таких оптимизаций.

Обратите внимание на использование APC для кэширования кода в байтовый код. Вы увидите большой прирост скорости для проекта.

-5
$string='Hi, my name is '.$name 

Это лучший способ, в смысле сочетания php и html!

или как это:

$string="Hi, my name is $name"; 

Это старый способ!

Или так:

$string=sprintf("Hi, my name is %s",$name); 

Это то, что программист приходит из основных или других языков визуального программирования клиента будет писать!

Я надеюсь, что был полезен.

+1

Я не согласен с тем, что «Привет, меня зовут« $ name »,« old », и что« Привет, мое имя ». $ Name' как-то лучше! – Josh

0

Лично, если это просто обычная переменная, или даже свойство класса, я бы написал так:

$newVarA = "This is some text with a $variable"; 
$newVarB = "This is some more text, written in $settings->language"; 

Однако, если я использую массив значений, то я сцепить с одним кавычки.

$newVarC = 'This is some text from a ' . $text['random'] . ' array'; 

Надеюсь, это имеет смысл. Все дело в том, чтобы найти конвенцию и придерживаться ее.

+0

Пример массива отлично работает без конкатенации. '... из {$ text ['random']} array' или' ... из $ text [random] array'. Вы бы только * имели * использовать метод {}, если ссылаетесь на многомерный массив, поскольку парсер PHP не жадный. '$ array [x] [y]' будет анализироваться как '<содержимое массива $ array [x]>'. –

+0

Да. Но я считаю, что использование фигурных скобок в строках просто немного уродливо для меня. Как я уже сказал, это просто пример того, как я лично объединяю строки с переменными. –

11

Разница между одиночными и двойными кавычками в PHP заключается в том, что двойные кавычки являются «интеллектуальными» в том, что они будут анализировать переменные при чтении, в то время как одинарные кавычки «тупые» и не будут пытаться анализировать любой символ в строке ,

Это приводит к незначительным различиям в отношении символов, которые вы можете использовать; в основном, единственный персонаж, вам нужно бежать при использовании одиночных кавычек сама одна цитата:

'\'' 

Хотя если вы используете двойные кавычки, вы должны избежать других персонажей:

"\$" 

Но это также позволяет для некоторых хитроумных вещей, как добавление новой строки в конце:

"my string\n" 

с одинарными кавычками вы должны сделать конкатенацию:

'my string' . chr(10) 
'my string' . "\n" 

Как правило, одинарные кавычки быстрее, потому что они «тупые».

Однако, как правило, не стоит беспокоиться об этих проблемах, что называется преждевременной оптимизацией, и его следует избегать.

Несколько слов об оптимизации: обычно нужно сначала написать программу так, как она должна работать, а затем найти самые большие узкие места и исправить эти конкретные. Если скорость строки действительно является проблемой для вас в PHP, вам может потребоваться перейти на другой язык.

Что касается скорости: вы, вероятно, захотите больше сосредоточиться на использовании памяти, чем на процессорном времени. В этих случаях время CPU можно считать довольно постоянным. Время процессора более актуально при написании алгоритмов, которые будут повторяться много раз.

Что касается конкатенаций: чем больше вы соединяете строки с помощью оператора-точки, тем больше памяти вы будете использовать.

Рассмотрим это:

$str1 = 'asdf'; 
$str2 = 'qwer'; 

// this will result in more memory being allocated for temporary storage 
echo $str1 . $str2; 

// this will not allocate as much memory as the previous example 
echo $str1; 
echo $str2; 
+2

Другой способ: 'echo $ str1, $ str2;' – nyuszika7h

0

Мой девиз и ответ: Оставьте его составителей, чтобы написать машинный код. Я скажу вам, что я имею в виду ...

Используйте одинарные кавычки, когда вам не нужно включать переменные PHP, в противном случае используйте двойные кавычки. Не беспокойтесь о производительности, просто используйте APC на производственных серверах. Вместо этого сосредоточьтесь на написании наиболее удобного кода; использовать комментарии, двойные кавычки и т. д., даже если они могут замедлить работу кода. Любая оптимизация, которая уменьшает ремонтопригодность/удобочитаемость кода, является плохим, оставьте ее в кодеках-кодеках и компиляторах, чтобы превратить ваш код в машинный код, не делайте этого сами ... обфускация исходного кода из-за оптимизации срабатывает.

5

Для повышения производительности, как и другие доказали, что немного быстрее использовать одинарные кавычки, а не двойные кавычки.

Одиночные кавычки, применимые к науке о удобочитаемости и вдали от субъективности, на самом деле добавляют больше «шума». Шум и то, как он относится к удобочитаемости, много говорится в книге «Чистый код», и можно сделать вывод, что чем больше не-пробелов вы должны видеть, тем больше он препятствует читаемости. Если применить к субъективности, большинство мест, на которые я потратил время на чтение, предпочитают одиночные двойные кавычки.

Соблюдайте свое мнение.

$var = "My $string with $lots of $replacements." 

гораздо более читабельным, чем:

$var = 'My ' . $string . ' with ' . $lots . ' of ' . $replacements . '.'; 

Я признаю, что:

$var = "My string."; 

выглядит почти так же, как:

$var = 'My String.'; 

Однако последние вводит меньше шума и когда есть много кода aro и это немного помогает, не говоря уже о других преимуществах, которые вы получаете от использования одинарных кавычек.

В конце концов, я предпочитаю KISS. Используйте одинарные кавычки, если вам не нужны двойные кавычки. Простое соглашение, которое легче печатать, проще в обслуживании, проще разбирать и читать легче.

Смежные вопросы