Комментарии 174
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Избегать switch не стоит, на мой взгляд. Иногда по логике приложения, оператор switch подходит куда более конструкций if… else
+22
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Всё, понятно. Мой коментарий ниже утратил актуальность.
-1
Спасибо за ссылку. Интересно было бы оформить такой скрипт, который выполнял бы тесты для конкретного пхп, к примеру последнего. Ведь все может изменится, и старые конструкции foreach к примеру, оптимизированы по скорости выполнения. К сожалению сейчас пхп редко использую, может быть дома для себя и накатаю :) А может быть кто-то подскажет линк на что-то подобное, уже реализованное — буду благодарен :)
0
Так, а вот это уже интересно. Я немного не понял — что в 2 раза бытрее? switch? Тогда какие же причины его не использования?
Если вы про if/esle (предположу, что вы просто неправильно написали), то все равно хотелось бы узнать поподробнее. Можете дать источник, где это написано?
Если вы про if/esle (предположу, что вы просто неправильно написали), то все равно хотелось бы узнать поподробнее. Можете дать источник, где это написано?
0
хоть if хоть switch в итоге на низком уровне приводится к конструкции «если тру тогда иначе отхер», так что имхо по скорости все одно…
0
В php — скорее всего. А вообще-то почти все компиляторы генерируют совершенно разный код для if и switch (case в delphi).
0
Полностью подерживаю, чем городить конструцию из if elseif(иногда в elseif происходит путаница) else.
Для меня проще использовать switch, выглядит более читабельно.
И еще бы в php было бы GoTO как было в VB, а то иногда его ОХ как не хватает (:
Для меня проще использовать switch, выглядит более читабельно.
И еще бы в php было бы GoTO как было в VB, а то иногда его ОХ как не хватает (:
-15
В php6 будет. Только вообще использование goto считается дурным тоном.
+9
настоящие программисты не боятся использовать GOTO
-2
Да уж, goto — издержки отсутствия других современных механизмов и может быть использовано чисто функционального программирования (ну или в соответствующих языках). Для ООП это крайне неудобная штука, так как определяет точку обращения по номеру строки, а не условному идентификатору (имени класса, метода, процедуры), а при этом, номер строки — часто изменяемая вещь.
0
Сочитание goto и ООП я вообще вообразить не могу. Жду php6, там видно будет. Но вообще goto только в бейсике и то в его ранних версиях привязывали к номеру строки. Позже использовались метки. в php6 так же будет.
+3
Согласен. Просто я с «goto» сталкивался в то время, когда меток еще и не было.
Но то, что в концепции ООП не может быть и меток то никаких — это однозначно, иначе, даже если это технически и возможно, рушится сама концепция ООП, в частности основополагающий принцип инкапсуляции.
Но то, что в концепции ООП не может быть и меток то никаких — это однозначно, иначе, даже если это технически и возможно, рушится сама концепция ООП, в частности основополагающий принцип инкапсуляции.
0
Каша какая-то… А оператор выбора (switch) ООП не противоречит? Как организация потока управления в обособленном методе может противоречить принципам организации программы на более высоком уровне — то есть ООП. Мы же не говорим, надеюсь, о спагетти-коде как парадигме — времена Фортран-IV вроде прошли. goto противоречит принципам структурного программирования, а ООП скорее ортогонален.
У меня такое впечатление, что «ООП» и «хороший стиль программирования» стали у многих взаимозаменяемыми понятиями.
У меня такое впечатление, что «ООП» и «хороший стиль программирования» стали у многих взаимозаменяемыми понятиями.
+1
Ну почему же каша. Оператор выбора switch не противоречит принципу инкапсуляции, так как действует в своей «области видимости» (scope) и не может нарушить последовательность выполнения цикла внутри метода (и вообще в любом своем контексте), в то время как goto — может, на что он, собственно и рассчитан — иначе просто нет смысла в нем.
Однако, я в своей мысли ни в коем случае не отождествляю «ООП» и «хороший стиль» — можно написать как прекрасный, так и жутко неудобоваримый как ООП-код, так и функциональный.
goto противоречит принципам структурного программирования — как один из фактов. В том числе. Тут совершенно согласен.
Однако, я в своей мысли ни в коем случае не отождествляю «ООП» и «хороший стиль» — можно написать как прекрасный, так и жутко неудобоваримый как ООП-код, так и функциональный.
goto противоречит принципам структурного программирования — как один из фактов. В том числе. Тут совершенно согласен.
0
Уже сейчас в php можно сделать много чего такого, что сложно назвать и структурным, и объкетно-орентированным програмированием. Не знаю, будет ли такое работать с других языках:
class A {function __construct(){ echo «A»;}}
class B {function __construct(){ echo «B»;}}
$expression = 1 or 2; // Now, it's true == 1
switch ($expression)
{
case 1: class C extends A{}; break;
case 2: class C extends B{}; break;
}
$my = new C();
Для консерваторов конечно это страшнейший код, о котором никто не должен знать (Т-с-с!). Но я нахожу в нём свою красоту :-)
А представьте, еще goto будет? И нэймспейсы? Это я к тому, что ООП и хороший стиль — это кислое с длинным. Да и само понятие «хороший стиль» тоже весьма расплывчато. Для многих вон использование break уже плохой стиль…
class A {function __construct(){ echo «A»;}}
class B {function __construct(){ echo «B»;}}
$expression = 1 or 2; // Now, it's true == 1
switch ($expression)
{
case 1: class C extends A{}; break;
case 2: class C extends B{}; break;
}
$my = new C();
Для консерваторов конечно это страшнейший код, о котором никто не должен знать (Т-с-с!). Но я нахожу в нём свою красоту :-)
А представьте, еще goto будет? И нэймспейсы? Это я к тому, что ООП и хороший стиль — это кислое с длинным. Да и само понятие «хороший стиль» тоже весьма расплывчато. Для многих вон использование break уже плохой стиль…
+1
Динамическое порождение классов не вписывается в ООП? Ну-ну :-)
0
А чем неймспейсы не угодили?) Мы их используем в C# (и packages в ActionScript) вовсю и очень рады, что они есть!
На самом деле, для консерваторов динамическая типизация — уже нечто ужасное. Так что примеров много.
А по поводу «ООП» и «хороший стиль» я свою мысль уже написал в предыдущем комментарии. С тех пор взгляд пока не изменился :)
На самом деле, для консерваторов динамическая типизация — уже нечто ужасное. Так что примеров много.
А по поводу «ООП» и «хороший стиль» я свою мысль уже написал в предыдущем комментарии. С тех пор взгляд пока не изменился :)
0
Я всё же не могу отождествить инкапсуляцию как принцип ООП и, хм, локальность в потоке управления. Тем более goto действует в пределах функции или метода, это же не call/cc… Ограниченная видимость переменных в пределах операторного блока — это что, тоже инкапсуляция?
+1
А, нет, возможно тут вы правы, не поинтересовался scope'ом самих операторов goto.
Однако тогда какой вообще толк в goto?
Однако тогда какой вообще толк в goto?
0
Даже в Pascal сделано goto по привязке к lable, а не к номеру строки, неужели в php не додумаются?!
0
НЛО прилетело и опубликовало эту надпись здесь
помнится, даже в Паскале, в официально документации, было написано: функция goto, делает что-то-там, использовать только при отладке, не использовать в конечных программах.
И в других языках аналогично.
И в других языках аналогично.
0
зато сам код PHP девственно чист от этого:
~/tmp/php-5.3.0alpha1 $ grep -ir " goto " * | grep -v '*' | wc -l 16369
+6
НЛО прилетело и опубликовало эту надпись здесь
ойблин, название помню, что делала — уже не вспомню (
-1
Вызов подпрограммы :) Когда младшей сестре в школе начали QB вдалбливать, и не такое пришлось вспомнить :-D
0
Проблема со switch в php в том, что он сравнивает в кейсах, не учитывая типы, т.е. не ===, а ==
чем это грозит:
$test = true;
switch($test) {
case 1:
echo '1';
break;
case 2:
echo '2';
break;
}
Выведется — 1
чем это грозит:
$test = true;
switch($test) {
case 1:
echo '1';
break;
case 2:
echo '2';
break;
}
Выведется — 1
0
Обычно '==' используется чаще '==='. Прблему можно обойти, но не слишком удобным способом:
$test = true;
switch(true)
{
case $test === 1:
echo '1';
break;
case $test === 2:
echo '2';
break;
}
Нифига не выведится.
$test = true;
switch(true)
{
case $test === 1:
echo '1';
break;
case $test === 2:
echo '2';
break;
}
Нифига не выведится.
+1
мм… а должно быть скока? Если true = 1 всегда.
0
мм… а должно быть скока? Если true = 1 всегда.
0
Мне вот интересно, паттерны, заменяющие свитчи и «тяжелые» условные операторы нынче непопулярны, да?
0
НЛО прилетело и опубликовало эту надпись здесь
Не, тогда уж RTTI-based способы ещё более логичны :)
0
А break и continue вообще считается плохой практикой программирования и эти два оператора следует использовать лишь в крайних случаях.
-22
Почему, и что за крайние случаи?
0
Потому что резко ухудшается читабельность кода и если через какое-то время попытаться понять, что делает кусок кода, в котором есть break или continue — сделать это непросто(особенно если код писал другой человек).
Я за свою довольно долгую практику не встречал ни одного случая когда break или continue были необходимы, всегда можно переписать код без них, хотя он и может стать немного объемнее, но и гораздо понятнее.
Мне приходилось использовать эти два оператора только во время отладки, когда, например, нужно вывести какой-то массив данных и прервать выполнение большого цикла.
Я за свою довольно долгую практику не встречал ни одного случая когда break или continue были необходимы, всегда можно переписать код без них, хотя он и может стать немного объемнее, но и гораздо понятнее.
Мне приходилось использовать эти два оператора только во время отладки, когда, например, нужно вывести какой-то массив данных и прервать выполнение большого цикла.
-4
Научно доказано, что любой алгоритм можно реализвать только с помщью оператора if и цикла while. Может, только ими пользоваться? Код вполне станет «немного объемнее, но и гораздо понятнее».
+3
Вряд ли станет гораздо понятнее. Кроме того, той же наукой доказано, что любую программу можно реализовать средствами железа. Почему бы не делать так? Вот познакомьтесь, эта микросхемка реализует веб сервер с одноклассниками (: А на сколько шустрее все будет на ней бегать… Единственная проблема это дальнейшее развитие и отладка немного затруднены (:
+2
вы наверно хотели сказать «с помщью оператора if или цикла while»?
0
Нет. Я сказал, то что хотел сказать. Обязательно нужен оператор условия и оператор цикла. Как вы одним if-ом реализуйте цикл?
-1
Рекурсивно
function opa($i)
{
$i++;
if($i != 10){
echo $i;
opa($i);
}
}
opa(1);
+7
НЛО прилетело и опубликовало эту надпись здесь
Выше ссылались на формальную теорему, что любой поток управления можно представить с помощью последовательного выполнения, условного выполнения и цикла, и только их. Рекурсия — это уже другая модель вычислений, впрочем, эквивалентной мощности.
0
Про то, как с помощью одного while обойтись без if написать?
0
1 000 000 проходов цикла это выдержит, как считаете?
-2
Уточните вопрос, пожалуйста.
0
Вот так это будет работать?
function opa($i) { $i++; if($i != 10000000){ echo $i; opa($i); } } opa(1);
function opa($i) { $i++; if($i != 10000000){ echo $i; opa($i); } } opa(1);
-2
да
0
А стек возврата не переполнится?
-2
Мне все равно. Моя задача была доказать, что любой алгоритм можно реализовать с помощью оператора if или оператора while.
+2
В нормальных языках — не переполнится, потому что это хвостовая рекурсия, т.е. фактически, цикл. ;-)
+2
В таком случае прийдется например вместо for писать while і писать лишнее условие в цыкл. Очень сомниваюсь что это понятнее чем обычный if в теле цыкла с условием.
В случае с break и contunue получается своего рода «прерывание»… а именно так оно реализовано на низком уровне (все процедуры, функции и т.п.). Для того чтобы понять проблему мы всегда разбираем ее суть, ИМХО для написания хорошего програмного кода необходимо понимать как он исполняется :)
В случае с break и contunue получается своего рода «прерывание»… а именно так оно реализовано на низком уровне (все процедуры, функции и т.п.). Для того чтобы понять проблему мы всегда разбираем ее суть, ИМХО для написания хорошего програмного кода необходимо понимать как он исполняется :)
+1
Значит конструкция
foreach( scandir($dir) as $row )
{
if( $row == '.' or $row == '..') continue;
if( $row == $myfile )
{
print 'YES!';
break;
}
}
ужасно плохо читается?
Бред.
foreach( scandir($dir) as $row )
{
if( $row == '.' or $row == '..') continue;
if( $row == $myfile )
{
print 'YES!';
break;
}
}
ужасно плохо читается?
Бред.
-1
очень интересно. как вы обходитесь без break в случае поиска элемента в массиве? вы просматриваете всегда весь массив? как по мне нужно остановить цикл если элемент найден.
+3
А что разве нет встроенных функций для поиска элементов массива? O_o
+1
for($i=0;$i<$count && $notfind;$i++)…
или
do {...} while ($found)
кажется, это азбука алгоритмизации. кроме как в случае крайней запарки и работы с чужим кодом, не впишу break в цикл. нафик-нафик
или
do {...} while ($found)
кажется, это азбука алгоритмизации. кроме как в случае крайней запарки и работы с чужим кодом, не впишу break в цикл. нафик-нафик
-3
Может это только мои заморочки, но данный цикл будет работать медленее, т.к. при каждой итерации будет выполняться дополнительная проверка. Да и плюс лишняя переменная.
+3
НЛО прилетело и опубликовало эту надпись здесь
Вы путаете с goto
0
Поддерживаю. А за использование операторов break N и continue N, где N > 1 я бы больно стучал.
+3
Правда? Кто сказал? Я думал goto плохо а break и continue его заменяет… В пхп нету goto так надо обругать break и continue?
+5
Это очень устаревший взгляд. Операторы break и continue считались «плохими» в 60-70 годах, поскольку они противоречили правилу структурного программирования об одной точке выхода из метода. В те времена в коде господствовали огромные функции и разобраться в них было сложно, особенно если у них было несколько точек выхода. В те времена это был хороший совет.
Сейчас высокоуровневый код изменился, господствует концепция Composed method, и соотвественно все функции небольшие. В таких условиях break и continue только улучшают код, поскольку помогают выделить особые граничные условия, облегчая чтение основного алгоритма. Без них проверка граничных условий пораждает кучу вложенных блоков, и код становится совсем некрасивым.
Сейчас высокоуровневый код изменился, господствует концепция Composed method, и соотвественно все функции небольшие. В таких условиях break и continue только улучшают код, поскольку помогают выделить особые граничные условия, облегчая чтение основного алгоритма. Без них проверка граничных условий пораждает кучу вложенных блоков, и код становится совсем некрасивым.
+12
Спасибо, буду иметь ввиду. А не подскажите ссылку, где можно почитать про Composed method, или лучшее решение — гуглить? :)
0
Да тут особенно не о чем читать :). Просто мне нравится термин. Его предложил Кент бек в своей книжки про лучшие практики в Smalltalk.
Это простой и короткий метод, состоящий из нескольких простых шагов (вызовы других методов или системных функций, простые циклы), находящихся на одном уровне детализации (то есть если метод начинается с вызова понятно названных функций, а потом вдруг появляется страшный цикл работающий с битами, то это неправильно, для него нужна отдельная функция).
В общем, смысл в том, что такой метод должен читаться легко и приятно, как книжка (потому что он короткий и состоит из вызовов других функций с понятными именами). Взглянув на него сразу должна быть понятна его логика работы. А все сложные моменты реализации должны быть в других функциях.
Это простой и короткий метод, состоящий из нескольких простых шагов (вызовы других методов или системных функций, простые циклы), находящихся на одном уровне детализации (то есть если метод начинается с вызова понятно названных функций, а потом вдруг появляется страшный цикл работающий с битами, то это неправильно, для него нужна отдельная функция).
В общем, смысл в том, что такой метод должен читаться легко и приятно, как книжка (потому что он короткий и состоит из вызовов других функций с понятными именами). Взглянув на него сразу должна быть понятна его логика работы. А все сложные моменты реализации должны быть в других функциях.
+2
Ага, а помимо этого — хорошо тестируемый. Только по набору тестов можно было понять, что делает метод. Кент Бек — одна из известных фигур в Agile в целом и unit-тестировании в частности.
Вообще, изучение принципов Test-Driven Development дает много ответов на то, как писать красивый и функциональный код без ненужных излишеств.
Вообще, изучение принципов Test-Driven Development дает много ответов на то, как писать красивый и функциональный код без ненужных излишеств.
0
Вы перепутали break/continue с goto. Вот goto следует избегать. А break/continue как раз и придумали на замену goto.
0
По ссылке про declare интересная информация про отладку скрипта. В частности, в комментариях к функции приводится пример, как можно проанализировать время выполнения каждой функции.
У кого-нибудь реализован класс с хорошей функциональностью для этих целей?
У кого-нибудь реализован класс с хорошей функциональностью для этих целей?
+1
ну не свсем клас, но:
function profile ($dump = FALSE)
{
static $profile;
// Возвращается время, хранимое в профиле, затем удаляется
if ($dump) {
$temp = $profile;
unset ($profile);
return ($temp);
}
$profile[] = microtime ();
}
//как использовать:
//register_tick_function(«profile»);
//profile ();
//bla bla bla — ваш код
//print_r (profile (TRUE));
function profile ($dump = FALSE)
{
static $profile;
// Возвращается время, хранимое в профиле, затем удаляется
if ($dump) {
$temp = $profile;
unset ($profile);
return ($temp);
}
$profile[] = microtime ();
}
//как использовать:
//register_tick_function(«profile»);
//profile ();
//bla bla bla — ваш код
//print_r (profile (TRUE));
+1
А просто профайлер нельзя использовать?
+1
Возвращаемые значения в инклудах удобно для отладки, еще на перле была такая практика — в конце файла ставишь что-нить типа return true; Потом проверяешь его — сразу видно где эрорра засела.
+1
Блин я в шоке, такое публикова, первый пункт применения брейка вообще нормалного человека повалит с ног. Брейк и так всегда и во всех языках создавался именно для цикло, там же и применялся, а в данной статье автор почему-то думает люди используют его в свиче, а о применении в циклах не знают. Писец поный, а не статья. И вообще бредовы практически все пункты, среди них про include(вывода автора — чушь и только запутают неопытного пользователя(такого же как видимо и сам автор:))),
${} — не оператор, а просто тут есть скобки:)
Автору: не стоит больше писать такого на серьёзных ресурса, либо сразу помещайте статьи в раздел «Юмор»
${} — не оператор, а просто тут есть скобки:)
Автору: не стоит больше писать такого на серьёзных ресурса, либо сразу помещайте статьи в раздел «Юмор»
-1
А чего минусуем если ни секрет, у автора много друзей ничего не понимающих в PHP, ну а если с чем-то не согласны, тоуж пишите пожалуйста.
0
Может проблема не в смысле вашего поста, а в манере подачи?
+3
Да нет судя по минусам автора статьи других мои комментариев, дело не в способе подачи, а в том что с ним не согласны. А за пропущенные буквы в первом моем комментарие — извиняюсь, торопился:)
-2
А чего такого в «манере подачи»? Абсолютно по делу коментарий.
«Знаете ли вы, для чего нужен брейк? В РНР, оказывается, есть такая неожианная возможность...». плАчу…
Пример исспользования include вообще разит наповал. Автор статьи занимается форменным вредительством: тем, кому в голову не приходило подобное исспользование — им оно и не надо, а те, кто догадался — понимают, почему этого делать нельзя никогда.
«Оператор ${}.» — это вообще цирк. И что же это за оператор такой? Унарный? Логический?
И это в статье «о программировании»…
«Знаете ли вы, для чего нужен брейк? В РНР, оказывается, есть такая неожианная возможность...». плАчу…
Пример исспользования include вообще разит наповал. Автор статьи занимается форменным вредительством: тем, кому в голову не приходило подобное исспользование — им оно и не надо, а те, кто догадался — понимают, почему этого делать нельзя никогда.
«Оператор ${}.» — это вообще цирк. И что же это за оператор такой? Унарный? Логический?
И это в статье «о программировании»…
0
Во-первых вы тут не один. Во-вторых, вы все знаете — хорошо, но кричать что статья плохая только потому написано то, что вы уже знаете — признак школьного возраста. В-третьих давайте вы не будете решать, за других — что кому надо — это не в вашей компетенции. В-четвертых что это за оператор такой, русским языком написано в статье. Прочитайте, пожалуйста, внимательно.
Это же все относится к serega011.
Это же все относится к serega011.
-3
>Во-вторых, вы все знаете — хорошо, но кричать что статья плохая только потому написано то, что вы уже знаете — признак школьного возраста
При чём тут я? В принципе, это любой человек, занимающийся программированием должен знать.
> В-третьих давайте вы не будете решать, за других — что кому надо — это не в вашей компетенции.
А в чьей? В вашей? lol!
>В-четвертых что это за оператор такой, русским языком написано в статье.
Угу, именно это я и имел в виду. Вы, вообще, знаете, что такое «оператор»?
Привелите, пожалуйста, пункт спецификации РНР, где рассказывается об этом операторе.
Спасибо.
При чём тут я? В принципе, это любой человек, занимающийся программированием должен знать.
> В-третьих давайте вы не будете решать, за других — что кому надо — это не в вашей компетенции.
А в чьей? В вашей? lol!
>В-четвертых что это за оператор такой, русским языком написано в статье.
Угу, именно это я и имел в виду. Вы, вообще, знаете, что такое «оператор»?
Привелите, пожалуйста, пункт спецификации РНР, где рассказывается об этом операторе.
Спасибо.
0
> В принципе, это любой человек, занимающийся программированием должен знать.
Про любой учебник и пр. по PHP (и не только) можно сказать — а нафиг он нужен, если в мануалах все есть? Курите маны, господа! :-)
Любой человек, занимающийся програмированием, должен сперва откуда-то об этом узнать.
> А в чьей? В вашей?
Не в моей. Но я ж даю утврждений типа «так, вот для тех это нужно, а для тех не нужно».
> Вы, вообще, знаете, что такое «оператор»?
Инструкция или Оператор (англ. statement) — наименьшая автономная часть языка программирования; команда. — ru.wikipedia.org/wiki/Оператор_(программирование). Ну и?
Ладно, если это не оператор, что что это по вашему? Скобка? Скобка — это не оператор?
В манах по PHP я не нашел описание этой возможности, но это не значит что её нет.
Про любой учебник и пр. по PHP (и не только) можно сказать — а нафиг он нужен, если в мануалах все есть? Курите маны, господа! :-)
Любой человек, занимающийся програмированием, должен сперва откуда-то об этом узнать.
> А в чьей? В вашей?
Не в моей. Но я ж даю утврждений типа «так, вот для тех это нужно, а для тех не нужно».
> Вы, вообще, знаете, что такое «оператор»?
Инструкция или Оператор (англ. statement) — наименьшая автономная часть языка программирования; команда. — ru.wikipedia.org/wiki/Оператор_(программирование). Ну и?
Ладно, если это не оператор, что что это по вашему? Скобка? Скобка — это не оператор?
В манах по PHP я не нашел описание этой возможности, но это не значит что её нет.
0
Поздравляю. Вы наконец поняли то, что это НЕ ОПЕРАТОР.
{ } — это, если мне не изменяет память, называется операторными скобками. $ — это специальный символ или что-то в этом роде. Их сочетание к операторам отношениея не имеет.
Удачи в изучении программирования!
{ } — это, если мне не изменяет память, называется операторными скобками. $ — это специальный символ или что-то в этом роде. Их сочетание к операторам отношениея не имеет.
Удачи в изучении программирования!
0
Приведите, пожалуйста, пункт спецификации РНР, где рассказывается об этом.
Спасибо.
Спасибо.
0
www.google.ru/search?hl=ru&q=%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D0%B5+%D1%81%D0%BA%D0%BE%D0%B1%D0%BA%D0%B8&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=
Первая ссылка, там и о РНР. Не вижу, что Вам помешало сделать это самому.
Ковыряться в стандарте, чтоб найти номер пункта у меня, к сожалению, нет ни времени ни желания — это всё-таки настолько общие вещи, что они не являются специфическими для какого-то конкретного языва.
Первая ссылка, там и о РНР. Не вижу, что Вам помешало сделать это самому.
Ковыряться в стандарте, чтоб найти номер пункта у меня, к сожалению, нет ни времени ни желания — это всё-таки настолько общие вещи, что они не являются специфическими для какого-то конкретного языва.
0
Операторные скобки — это всё-таки обычно тело if'а, циклов, илбо обособленная часть кода, в них заключённая. Не думаю, что в случае с ${$hi} они имеют такой-же смысл, скорее это именно спец. конструкция языка.
0
Вы меня извините, но вместо споров с мной займитесь лучше теорией. Не будете плутать в «оператор»/«операторные скобки»/«конструкция языка».
P.S. Операторные скобки — это совсем не «тело цикла». Блин, ну написано же человеческим языком: «команды, определяющие… блок команд». В разных языках это «{}», 'begin end' и т.д.
P.S. Операторные скобки — это совсем не «тело цикла». Блин, ну написано же человеческим языком: «команды, определяющие… блок команд». В разных языках это «{}», 'begin end' и т.д.
0
Не придирайтесь к лингвистическим особенностям, ясное дело это не тело цикла, это то что его ограничивает :) А о том, являются ли фигурные скобки в этом случае именно операторными или же обрабатываются PHP-парсером по иным правилам, можно судить только по исходным кодам Zend Engine, которые ни я, ни вы(наверняка), не читали.
0
Ага.
if ($expression) и $a = ($a+1)*2;
Скобки тут — это одно и тоже? Они выполняют одну и ту же функцию? Если рассуждать так же, как вы — то скобка тоже не оператор. Это конструкция языка. :-D
if ($expression) и $a = ($a+1)*2;
Скобки тут — это одно и тоже? Они выполняют одну и ту же функцию? Если рассуждать так же, как вы — то скобка тоже не оператор. Это конструкция языка. :-D
0
Вы меня не поняли.
Приведите, пожалуйста, пункт спецификации РНР, где рассказывается об этом.
Приведите, пожалуйста, пункт спецификации РНР, где рассказывается об этом.
0
подача комента плохая, но с критикой я согласен.
+2
НЛО прилетело и опубликовало эту надпись здесь
можете отрефакторить такое?
foreach ($groups as $group)
{
$permission = Cache:: read('Permission_'. $group);
if (isset($permission[$this->Auth2->action()]))
{
$valid = $permission[$this->Auth2->action()];
if ($valid)
break;
continue;
}
$valid = $this->Acl->check(array('Group' => array('id' => $group)), $this->Auth2->action());
$permission[$this->Auth2->action()] = $valid;
Cache:: write('Permission_'. $group, $permission);
if ($valid)
break;
}
if (!$valid)
$valid = $this->Acl->check($user, $this->Auth2->action());
return $valid;
foreach ($groups as $group)
{
$permission = Cache:: read('Permission_'. $group);
if (isset($permission[$this->Auth2->action()]))
{
$valid = $permission[$this->Auth2->action()];
if ($valid)
break;
continue;
}
$valid = $this->Acl->check(array('Group' => array('id' => $group)), $this->Auth2->action());
$permission[$this->Auth2->action()] = $valid;
Cache:: write('Permission_'. $group, $permission);
if ($valid)
break;
}
if (!$valid)
$valid = $this->Acl->check($user, $this->Auth2->action());
return $valid;
0
Break2 — хороший вариант выхода из циклов, осуществляющих поиск по двумерному массиву:
for ($i=0;$i<X;$i++) for ($j=0;$j<Y;$j++)
{
...
if (...) break 2;
}
+3
Многие вещи очевидны для тех, кто хоть раз читал документацию PHP.
+6
новички это такие ребята которые еще не заглянули в langref? мне кажется подобные статьти можно с уверенностью назвать IT-графоманством. *заранее попросил прощения у своей кармы*
+1
а вот и да!
-3
А вот и не буду бить по вашей карме :-) Называйте как хотите.
Только знаете ли, не все начинают изучение с внимательного прочтения мануала. Даже многие опытные програмисы не заглядывают в официальный мануал основ языка. Потому что обычно изучение php начинается со статей типа «Выучите язык за 26 уроков». Эти статьи тоже можно так назвать? А там знаете ли таких вещей не пишут.
Только знаете ли, не все начинают изучение с внимательного прочтения мануала. Даже многие опытные програмисы не заглядывают в официальный мануал основ языка. Потому что обычно изучение php начинается со статей типа «Выучите язык за 26 уроков». Эти статьи тоже можно так назвать? А там знаете ли таких вещей не пишут.
0
спасибо, информативно, занес в закладки
-3
Единственное, что действительно полезно — так это конструкция ${}
Но я, например, использую её в строках, например, если нужно вывести переменную внутри текста.
Т.е. «Превед ${var1}_медвед» вместо «Превед „.$var1.“_медвед». Имхо, так гораздо читабельнее.
Но я, например, использую её в строках, например, если нужно вывести переменную внутри текста.
Т.е. «Превед ${var1}_медвед» вместо «Превед „.$var1.“_медвед». Имхо, так гораздо читабельнее.
0
Пы.сы. Как меня раздражиют негативно настроенные малолетние или великовозрастные уебаны, кто бы знал. Дедовщинщики, блядь, с чувством безнаказанности. Отлавливать вас надо по одному и учить правильно жить. С позитивом в душе.
-6
Может быть «Превед {$var1}_медвед»? =)
0
Ой, да, точно, затупил, пасип.
-2
Да, в строках — это уже немного другое.
-1
Значит не то написал. Кстати, а конструкция {$var1} пришла из руби все-таки? И когда она появилась, может знает кто? Я нашел её совершенно случайно, методом научного тыка. В мануалах не видел. Может я невнимательный?
0
http://php.ru/manual/language.types.string.html
Конструкция появилась в PHP4.
Конструкция появилась в PHP4.
0
ничего путного. написали бы уже про стримы что-ли.
-2
НЛО прилетело и опубликовало эту надпись здесь
а кому-нибуть приходилось в switch-е continue использовать, я вот сижу и ломаю голову… не могу припомнить ни одного случая, чтобы понадобилось даже
0
Про DECLARE не знал. Остальным активно пользуюсь. Особенно первыми двумя.
0
спасибо за статью, почти все для меня было неизвестно
+1
НЛО прилетело и опубликовало эту надпись здесь
В этом примере нет знака $, потому что при обращении к методу или свойству класса он не требуется.
Не путайте людей.
Мы обращаемся к методу или свойству экземпляра (объекта) класса.
При обращении к свойствам класса нужно $ указывать: stdClass::$myParam, и, следовательно, stdClass::${...}.
0
Уже не раз тут это писал… это ведь общеизвестно, стоит только прочесть официальную документацию и ОБДУМАТЬ ее, как ее использовать. Это между прочим и есть исходное значение слова «хакинг», баминг когда, нахождение малозатратных и высокоэффективных путей решения задачи.
И все станет понятно и такие статьи можно будет пачками писать. Но все равно спасибо за ваш труд, хотя бы по хорошему оформлению статьи, с примерами и т.п. С уважением.
И все станет понятно и такие статьи можно будет пачками писать. Но все равно спасибо за ваш труд, хотя бы по хорошему оформлению статьи, с примерами и т.п. С уважением.
0
про declare начинаешь узнавать подробней когда начинаешь юзать pcntl_fork().
0
Отличная статья. Показывает, что PHP'шники часто изучают язык по примерам, и испытывают лёгкий шок, когда обнаруживают неизвестные им конструкции. После этого пишут статьи.
Зато теперь говнокодеры знают про include и break — ведь они всё равно не будут ни мануалов читать, ни книг. Всё польза.
Зато теперь говнокодеры знают про include и break — ведь они всё равно не будут ни мануалов читать, ни книг. Всё польза.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Интересные возможности языка PHP