Просмотр полной версии : ОПРОС мнений по поводу ковычек
я только начал и у меня вопрос. насколько важно следить за тем какие ковычки ставить . или можно везде ставть " . хотелось бы иметь правильный стиль.
подскажите старички :)
Везде кроме mysql запросов использовать одинарные кавычки.
prescott
08.01.2009, 18:30
Если хочешь чтобы переменные внутри строки интерпретировались - двойные, если нет - одинарные.
$t="123";
echo "Переменная $t"; => Переменная 123
echo 'Переменная $t'; => Переменная $t
// с одинарными и использованием переменной
echo 'Переменная '.$t; => Переменная 123
Больше не помню где это принципиально.
В двойных кавычках обрабатываются такие последовательности, как \n, \t, \r, \x41 и т.п. одинарных - нет.
А вообще, советую почитать тут: http://ru2.php.net/language.types.string
Всё подробно объясняется.
.:EnoT:.
09.01.2009, 01:00
Я лично юзаю одинарные, ну кроме конечно \r\n\t и др (как сказано выше).
Более того, переменные нужно выносить за кавычки (во всяком случае юзанье переменных в двойных кавычках считается не хорошим стилем).
И SQL запросы ничем не особенные (это к посту #2). Там фишка в том, что данные следует вносить в кавычках (одинарных), поэтому чтобы их не экранировать весь запрос кидают в двойные.
Вроде бы всё...
Везде кроме mysql запросов использовать одинарные кавычки. да бред.
echo "some $line with $many $variables";
Просто многие нубы через склеивание делают, читаемость сильно ухудшается.
Более того, переменные нужно выносить за кавычки (во всяком случае юзанье переменных в двойных кавычках считается не хорошим стилем). По книгам Фленова учился?))
Правильно юзать то, что удобнее.
P.S. интересно, как скоро прибежит неуч, который первым вякнет, что одинарные быстрее?)
echo "а я люблю вот так {$kak[16]} вот";
{} - выделяют переменную в строке, использую при вставке элемента массива
.:EnoT:.
09.01.2009, 01:29
По книгам Фленова учился?))
Правильно юзать то, что удобнее.
Слава богу не учился по этому сборнику страшилок)
P.S. интересно, как скоро прибежит неуч, который первым вякнет, что одинарные быстрее?)
Ага, быстрее, знаешь почему?))
Потому что при использовании одинарных кавычек ты нажимаешь на букву Э в латинской раскладке, а при использовании двойных тебе приходится ещё и нажимать шифт (так же шифт + 2).
И с этим нажатием на шифт ты теряешь драгоценное время (а знаешь сколько за год набегает времени?), а так же силы, которые уходят на нажатие шифта, и как следствие повышенная уставаемость, стрессы, депрессии, тошнота, недомогание, судороги, кома и летальный исход, так что юзайте одинарные кавычки :D
Pashkela
09.01.2009, 01:29
а вот так " {$kak[16]}" точно нельзя, неправильно, и небезопасно
а вот так " {$kak[16]}" точно нельзя, неправильно, и небезопасно
почему нельзя то а?
а вот так " {$kak[16]}" точно нельзя, неправильно, и небезопасно
это почему же?
Pashkela
09.01.2009, 01:41
ну это, некрасиво как-то, щаз еще погуглю, так не помню
а вот так " {$kak[16]}" точно нельзя, неправильно, и небезопасно Это один из двух одобренных в ZendFramework сбособов вставлять переменные в " строки.
ну это, некрасиво как-то, щаз еще погуглю, так не помню
наоборот красиво. ИМХО красивее
echo "ололо {$omg} привет" чем без скобок.
еще случай
тебе надо вывести строку "я-хакир"
$xak = "хак";
в лучшем виде будет echo "я-{$xak}ир";
а вообще форматный вывод решает
Pashkela
09.01.2009, 02:07
тебе надо вывести строку "я-хакир"
$xak = "хак";
в лучшем виде будет echo "я-{$xak}ир";
Я бы так сделал:
тебе надо вывести строку "я-хакир"
$xak = 'хак';
echo "я-$xakир";
Я бы так сделал:
тебе надо вывести строку "я-хакир"
$xak = 'хак';
echo "я-$xakир";
да я не очень хороший пример привел. но читаемость моего варианта в разы лучше
Вариант с {} позволяет вставлять не только переменные, но и любые массивы или переменные из классов.
echo "абвг {$var[1]['str']} {$xxx->blabla['qwerty']}";
Это очень удобно для вывода переменных с использованием heredoc-синтаксиса.
Можно все, вот только
echo '[0] => '.$array[0]."\n";
И читабельно, и работает быстрее, чем вариации типа:
echo "[0] => {$array[0]}\n";
Сделал скриптик для примера:
<?php
function getmicrotime()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
define(N, 1000000);
for($i=0; $i<N; $i++)
getmicrotime();
$str = "";
$array['a'] = 'efg';
$start = getmicrotime();
for($i=0; $i<N; $i++)
$str = 'abcd '.$array['a'].' hij';
echo getmicrotime() - $start, "\n";
$str = "";
$array['a'] = 'efg';
$start = getmicrotime();
for($i=0; $i<N; $i++)
$str = "abcd ".$array["a"]." hij";
echo getmicrotime() - $start, "\n";
$str = "";
$array['a'] = 'efg';
$start = getmicrotime();
for($i=0; $i<N; $i++)
$str = "abcd {$array['a']} hij";
echo getmicrotime() - $start, "\n";
$str = "";
$array['a'] = 'efg';
$start = getmicrotime();
for($i=0; $i<N; $i++)
$str = <<<HD
abcd {$array['a']} hij
HD;
echo getmicrotime() - $start, "\n";
$str = "";
$array['a'] = 'efg';
$start = getmicrotime();
for($i=0; $i<N; $i++)
$str = <<<HD
abcd $array[a] hij
HD;
echo getmicrotime() - $start, "\n";
?>
Результаты:
0.789710998535
0.792525053024
1.04027700424
1.01121997833
1.00872707367
Глупо так делать выводы. Как минимум, нужно произвести этот тест на нескольких машинах и не 1 раз. Также стоит выделить расчёт каждого варианта в отдельный скрипт.
На моём сервере к примеру 2 вариант в 2 раза "быстрее" первого.
[x26]VOLAND
09.01.2009, 19:01
В реальном приложении (где в подавляющем большинстве таких выводов не больше 1-2 сотен) разница составит десятитысячные доли секунды. Доо, конечно, это просто гигантская разница!! Тут же надо бросаться и оптимизировать!! Вы демаете, если замените кавычки на одинарные, ваш проект начнёт просто летать?
Имхо - данный вопрос сейчас становится всё менее актуальным, ибо в нормальных проектах для вывода уже давно используюся конструкции вида {varname} или <?php echo $varname;?> (надеюсь поняли о чём я).
Лучше чем заниматься этой ересью выучили бы ООП и MVC...
Глупо так делать выводы. Как минимум, нужно произвести этот тест на нескольких машинах и не 1 раз. Также стоит выделить расчёт каждого варианта в отдельный скрипт.
На моём сервере к примеру 2 вариант в 2 раза "быстрее" первого.
мое мнение - в программирование на скриптовых языках, так заморачиваться на оптимизации не стоит, потому что подобные недочеты - проблема интерпретатора
По поводу кавычек да, заморачиваться совсем не стоит.
Я просто прокомментировал заблуждение oRb'a )
Я бы так сделал:
тебе надо вывести строку "я-хакир"
$xak = 'хак';
echo "я-$xakир";
Молодец! Ты наверное крутой пхп-кодер, ведь так? Зачем ты пишешь то, чего не знаешь? Знаешь что выведит твой код? НИЧЕГО. А почему? Потому что переменную $xakир ты не определил. И это все написано в базовом курсе, которые ты великий хакер пропустил, когда тут писал ерунду.
http://ru2.php.net/manual/ru/language.variables.basics.php
И читабельно, и работает быстрее, чем вариации типа:
ты слепой, если {$array[0]} для тебя тяжело прочитать. Используй нормальные редакторы для нормального кода.
Pashkela
12.01.2009, 13:49
ыыы, пьяный наверное был, на самом деле всегда так делаю:)
$xak = 'хак';
echo 'я-'.$xak.'ир';
А {} свои несчастные сами юзайте:)
покажи кусок своего кода.
Pashkela
12.01.2009, 14:05
http://forum.antichat.ru/showpost.php?p=1021681&postcount=574
А так лезь в "php для новичков" и гни пальцы там, бобмик:)
я просил код, а не программу.
Pashkela
12.01.2009, 14:11
Вот ты торопишь меня, даже подумать не даешь:
<?php
echo 'Hello world';
?>
Это моя последняя разработка. А так пока учусь, конечно
http://forum.antichat.ru/showthread.php?p=1052301#post1052301
А ну тут все понятно. Конечно надо сначала создать кучу ненужный переменных, которые уже есть, потом возиться с кавычками. дальше тебе я ничего не напишу, и ты не пиши никаких советов.
Это моя последняя разработка.
Кто тут еще пальцы гнет, мистер вселенная.
Pashkela
12.01.2009, 14:20
Во-первых не очень понятно, почему это я вообще там "великий хакер" или "мистер вселенная" - вы голубой? Или просто мой тайный поклонник? Спасибо, но я преподчитаю девушек:)
А во вторых подберите слюньки и покажите мне СВОИ наработки, вот я и рассмотрю, кто ты и что ты. Только СВОИ, понимать буквально
какой смысл показывать что-то человеку, который не знает основ языка и чего-то еще советует.
Pashkela
12.01.2009, 14:25
Понятно. Тролль на сайте. И ахтунг к тому же:) До свидос
CrazyNight
12.01.2009, 21:25
Одинарные кавычки безусловно работают быстрее двойных.
А двойные с внутристроковыми переменными внутри - вообще полный бред, не знаю кто в здравом уме будет использовать такую технику на более-менее серьёзных проектах.
Уже сколько статей на эту тему написано, сколько тестов - и всё равно откуда-то берутся люди, которые будут всё на свете отрицать, забивая на базовые принципы интерпретируемых языков.
А двойные с внутристроковыми переменными внутри - вообще полный бред, не знаю кто в здравом уме будет использовать такую технику на более-менее серьёзных проектах. Я буду. Как и люди с мозгами.
Такой код лучше читается, а скорость та же.
Так сложно понять?
Уже сколько статей на эту тему написано, сколько тестов - и всё равно откуда-то берутся люди, которые будут всё на свете отрицать, забивая на базовые принципы интерпретируемых языков. Впринципе фраза верная, только вот вывод другой:
Скорость одинаковая.
А код читается лучше красивый.
AkyHa_MaTaTa
12.01.2009, 23:10
согласен с nerezus, CrazyNight возьми любой "более-менее серьёзных проект" и убедись в том что там используються внутристроковые переменные. Если на то пошло то код с использованием ООП будет проигровать по быстродействию коду с использыванием процедурного подхода, (ну не всегда, но все же) так почему "более-менее серьёзные" программисты используют подход с ООП в своих проектах (ну не всегда, но все же) - да потому что гораздо проше работать именно с обьектами, особено если количество строк давно перевалило за сотню-другую, чем е**ться с таким понятием как быстродействие, особенно в php. Php в принципе не предназначен для систем реального времени, и не используеться, например в системах управления АЭС,он прекрасно справляеться с теми задачами которые на него возложены.ИМХО.
.:EnoT:.
12.01.2009, 23:21
Ну если уж говорить о читабельности, то даже при стандартной подсветке PHP, переменные, вынесенные за кавычки сразу бросаются в глаза, нежели внутри кавычек.
echo "текст текст $str текст текст";
echo 'текст текст '.$str.' текст текст';
Фигурные скобки лично я предпочитаю не использовать, разве что только в маркерах.
А вообще каждый использует как привык и считает правильным для себя.
Больше всего убивает то, что порой находятся личности, которые в свои скрипты херачат такие бессмысленные конструкции, которые можно было бы заменить одной строкой...но при этом очень пекутся о скорости в двойных кавычках...
CrazyNight
12.01.2009, 23:40
Я буду. Как и люди с мозгами.
Такой код лучше читается, а скорость та же.
Так сложно понять?
Впринципе фраза верная, только вот вывод другой:
Скорость одинаковая.
А код читается лучше красивый.
Скорость одинаковая?
Терпения на вас не хватает...
Всё, да-да, одинаковая, весь интернет с его тестами и просто цикл с миллионом итераций врут.
Да и логика врёт, говорящая что двойные кавычки, в которых интерпретатор всегда ищет переменные и спец.символы, не могут работать с такой же скорость, как одинарные, которые интерпретатор всегда принимает как есть.
Не дай бог когда-нибудь с такими "программистами" работать вместе прийдётся.
PS. Минусуй сколько влезет, гуру :-)
особено если количество строк давно перевалило за сотню-другую Особенно если это десятки тысяч строк(в текущем проекте столько).
Ну если уж говорить о читабельности, то даже при стандартной подсветке PHP, переменные, вынесенные за кавычки сразу бросаются в глаза, нежели внутри кавычек. Внутри - тоже.
Просто подсветка синтаксиса на этом форуме убогая.
А вот лишние кавычки мешают.
Просто используй нормальные IDE. Если ты используешь блокнот - то это ТВОИ проблемы.
Всё, да-да, одинаковая, весь интернет с его тестами и просто цикл с миллионом итераций врут. Это синтетический тест. На реальных одинаковая.
Не дай бог когда-нибудь с такими "программистами" работать вместе прийдётся. Не бойся, когда буду нанимать себе помошников, то постараюсь не набрать таких, как ты.
Сейчас вот не могу набрать тех, кому не придется объяснять месяц, как и что писать, и почему код должен быть красивым и понятным, а не "оптимизированным" методом такой обфускации.
Скорость одинаковая?
Терпения на вас не хватает...
Всё, да-да, одинаковая, весь интернет с его тестами и просто цикл с миллионом итераций врут.
Да и логика врёт, говорящая что двойные кавычки, в которых интерпретатор всегда ищет переменные и спец.символы, не могут работать с такой же скорость, как одинарные, которые интерпретатор всегда принимает как есть.
Не дай бог когда-нибудь с такими "программистами" работать вместе прийдётся.
PS. Минусуй сколько влезет, гуру :-)
разница всеравно не заметна. ты думаешь, человечество придумало к примеру ООП, чтобы работало быстрее? а вот и нет. в пхп скриптах на первом месте удобочитаемость, а не скорость.
PS. ты гик
Из всего сказанного имеет смысл отложить только это
Больше всего убивает то, что порой находятся личности, которые в свои скрипты херачат такие бессмысленные конструкции, которые можно было бы заменить одной строкой...но при этом очень пекутся о скорости в двойных кавычках...
PS. ты гик
звучит уже просто как оскорбление :)
я лично всегда пишу одинарные кавычки. но не потому что так быстрее, а просто потому что минималист и они мне кажутся красивее :) так что в написании кода у каждого свои заморочки, от которых он никогда не откажется и мне кажется бесмысленно с пеной у рта орать что это даёт прирост на долю секунды.
даёт? ну пиши, только форматируй всё же так, чтобы не получилось такого говнокода:
if(!ch||tR.parentElement&&tR.parentElement()!=insField){insPosL=insPosR=s.le ngth;}
else{ insPosL=tR.text.length;
if(insField.type=='textarea'){tR1.moveToElementTex t(insField);
tR.setEndPoint('StartToStart',tR1);insPosR=tR.text .length;
}else{tR.moveStart('textedit',-1);insPosR=tR.text.length;}
insPosL=insPosR-insPosL; //-чрезвычайно хитрое поведение textRange в textarea
}}else{ insPosL=insField.selectionStart; insPosR=insField.selectionEnd;
if(insBeg&&self.opera&&!insPosL&&!insPosR){insPosL=insPosR=s.length;insBeg=0;}
}var insText=s.substring(insPosL,insPosR);
if((isInSel=selted==insText)&&s3==3){isInSel=insText.length;insText='';}
if(d.all)insField.defaultValue=s;else defa=s;
if(isPic&&!(s3==2&&insText!='')){s2=s1;s1='';} //for addressing&picture code
insField.value=s.substring(0,insPosL)+s1+insText+s 2+s.substring(insPosR,s.length);
if(isInSel&&s3==3)insPosR-=isInSel;
var insCursor=insPosR+s1.length+(isPic||insPosL!=insPo sR?s2.length:0);
/*for selectional cursor*/var insCursorL=insCursor;
if(s3==1){insCursorL=insPosL+s1.length;insCursor=s 1.length+insPosR;}//end "for"
var a1=s.substr(0,s3!=3?insPosR:insPosR+isInSel).match (/\r\n/g);
if(d.body.createTextRange){setTimeout("var t=insField.createTextRange();t.collapse();t.moveEn d('"
+ch+"',"+(insCursor-(a1?a1.length:0))+");t.moveStart('"+ch+"',"
+(insCursorL-((a1=s3!=3?s.substr(0,s3==1?insPosL:insPosR).match (/\r\n/g):a1)?a1.length:0))
+");t.select();",1); //-ещё более хитрые поправки последующего выделения текста в IE
если честно - очень хочу найти мудака, который это писал, чтобы силой заставить его переписывать. код очень полезный - но чтобы разобрать его - это просто п***ец какой-то..
Дикс Человек убрал незначящие пробелы и переводы строк, дабы уменьшить вес жабаскрипта. Ничто не мешает сделать замену ";" На ";\r\n" И тогда все вполне читаемо
if(!ch||tR.parentElement&&tR.parentElement()! = insField){insPosL = insPosR = s.le ngth;
}
else{ insPosL = tR.text.length;
if(insField.type == 'textarea'){tR1.moveToElementTex t(insField);
tR.setEndPoint('StartToStart',tR1);
insPosR = tR.text .length;
}else{tR.moveStart('textedit',-1);
insPosR = tR.text.length;
}
insPosL = insPosR-insPosL;
//-чрезвычайно хитрое поведение textRange в textarea
}}else{ insPosL = insField.selectionStart;
insPosR = insField.selectionEnd;
if(insBeg&&self.opera&&!insPosL&&!insPosR){insPosL = insPosR = s.length;
insBeg = 0;
}
}var insText = s.substring(insPosL,insPosR);
if((isInSel = selted == insText)&&s3 == 3){isInSel = insText.length;
insText = '';
}
if(d.all)insField.defaultValue = s;
else defa = s;
if(isPic&&!(s3 == 2&&insText! = '')){s2 = s1;
s1 = '';
} //for addressing&picture code
insField.value = s.substring(0,insPosL)+s1+insText+s 2+s.substring(insPosR,s.length);
if(isInSel&&s3 == 3)insPosR- = isInSel;
var insCursor = insPosR+s1.length+(isPic||insPosL! = insPo sR?s2.length:0);
/*for selectional cursor*/var insCursorL = insCursor;
if(s3 == 1){insCursorL = insPosL+s1.length;
insCursor = s 1.length+insPosR;
}//end "for"
var a1 = s.substr(0,s3! = 3?insPosR:insPosR+isInSel).match (/\r\n/g);
if(d.body.createTextRange){setTimeout("var t = insField.createTextRange();
t.collapse();
t.moveEn d('"
+ch+"',"+(insCursor-(a1?a1.length:0))+");
t.moveStart('"+ch+"',"
+(insCursorL-((a1 = s3! = 3?s.substr(0,s3 == 1?insPosL:insPosR).match (/\r\n/g):a1)?a1.length:0))
+");
t.select();
",1);
//-ещё более хитрые поправки последующего выделения текста в IE
да, не пришло в голову. но получается всё равно жуткая херня.
и там кстати ещё есть тернарные операторы четвёртого уровня вложенности.
это тоже ничего не значит?
блин давайте не сорится. все тут друзья. зачем некоторые на оскорбления скатываются. я лично всех мнение уважаю .
А я не уважаю глупые мнения.
Мне удобнее с одинарными.
не вижу смысла в опросе так как разница в исполнении скрипта составляет доли секунды...очень печально что у многих именно ЭТО ассциируется с оптимизацией кода :(
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot