Comments 174
UFO just landed and posted this here
UFO just landed and posted this here
Избегать switch не стоит, на мой взгляд. Иногда по логике приложения, оператор switch подходит куда более конструкций if… else
UFO just landed and posted this here
UFO just landed and posted this here
Всё, понятно. Мой коментарий ниже утратил актуальность.
Спасибо за ссылку. Интересно было бы оформить такой скрипт, который выполнял бы тесты для конкретного пхп, к примеру последнего. Ведь все может изменится, и старые конструкции foreach к примеру, оптимизированы по скорости выполнения. К сожалению сейчас пхп редко использую, может быть дома для себя и накатаю :) А может быть кто-то подскажет линк на что-то подобное, уже реализованное — буду благодарен :)
Так, а вот это уже интересно. Я немного не понял — что в 2 раза бытрее? switch? Тогда какие же причины его не использования?
Если вы про if/esle (предположу, что вы просто неправильно написали), то все равно хотелось бы узнать поподробнее. Можете дать источник, где это написано?
Если вы про if/esle (предположу, что вы просто неправильно написали), то все равно хотелось бы узнать поподробнее. Можете дать источник, где это написано?
хоть if хоть switch в итоге на низком уровне приводится к конструкции «если тру тогда иначе отхер», так что имхо по скорости все одно…
В php — скорее всего. А вообще-то почти все компиляторы генерируют совершенно разный код для if и switch (case в delphi).
Полностью подерживаю, чем городить конструцию из if elseif(иногда в elseif происходит путаница) else.
Для меня проще использовать switch, выглядит более читабельно.
И еще бы в php было бы GoTO как было в VB, а то иногда его ОХ как не хватает (:
Для меня проще использовать switch, выглядит более читабельно.
И еще бы в php было бы GoTO как было в VB, а то иногда его ОХ как не хватает (:
В php6 будет. Только вообще использование goto считается дурным тоном.
настоящие программисты не боятся использовать GOTO
Да уж, goto — издержки отсутствия других современных механизмов и может быть использовано чисто функционального программирования (ну или в соответствующих языках). Для ООП это крайне неудобная штука, так как определяет точку обращения по номеру строки, а не условному идентификатору (имени класса, метода, процедуры), а при этом, номер строки — часто изменяемая вещь.
Сочитание goto и ООП я вообще вообразить не могу. Жду php6, там видно будет. Но вообще goto только в бейсике и то в его ранних версиях привязывали к номеру строки. Позже использовались метки. в php6 так же будет.
Согласен. Просто я с «goto» сталкивался в то время, когда меток еще и не было.
Но то, что в концепции ООП не может быть и меток то никаких — это однозначно, иначе, даже если это технически и возможно, рушится сама концепция ООП, в частности основополагающий принцип инкапсуляции.
Но то, что в концепции ООП не может быть и меток то никаких — это однозначно, иначе, даже если это технически и возможно, рушится сама концепция ООП, в частности основополагающий принцип инкапсуляции.
Каша какая-то… А оператор выбора (switch) ООП не противоречит? Как организация потока управления в обособленном методе может противоречить принципам организации программы на более высоком уровне — то есть ООП. Мы же не говорим, надеюсь, о спагетти-коде как парадигме — времена Фортран-IV вроде прошли. goto противоречит принципам структурного программирования, а ООП скорее ортогонален.
У меня такое впечатление, что «ООП» и «хороший стиль программирования» стали у многих взаимозаменяемыми понятиями.
У меня такое впечатление, что «ООП» и «хороший стиль программирования» стали у многих взаимозаменяемыми понятиями.
Ну почему же каша. Оператор выбора switch не противоречит принципу инкапсуляции, так как действует в своей «области видимости» (scope) и не может нарушить последовательность выполнения цикла внутри метода (и вообще в любом своем контексте), в то время как goto — может, на что он, собственно и рассчитан — иначе просто нет смысла в нем.
Однако, я в своей мысли ни в коем случае не отождествляю «ООП» и «хороший стиль» — можно написать как прекрасный, так и жутко неудобоваримый как ООП-код, так и функциональный.
goto противоречит принципам структурного программирования — как один из фактов. В том числе. Тут совершенно согласен.
Однако, я в своей мысли ни в коем случае не отождествляю «ООП» и «хороший стиль» — можно написать как прекрасный, так и жутко неудобоваримый как ООП-код, так и функциональный.
goto противоречит принципам структурного программирования — как один из фактов. В том числе. Тут совершенно согласен.
Уже сейчас в 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 уже плохой стиль…
Динамическое порождение классов не вписывается в ООП? Ну-ну :-)
А чем неймспейсы не угодили?) Мы их используем в C# (и packages в ActionScript) вовсю и очень рады, что они есть!
На самом деле, для консерваторов динамическая типизация — уже нечто ужасное. Так что примеров много.
А по поводу «ООП» и «хороший стиль» я свою мысль уже написал в предыдущем комментарии. С тех пор взгляд пока не изменился :)
На самом деле, для консерваторов динамическая типизация — уже нечто ужасное. Так что примеров много.
А по поводу «ООП» и «хороший стиль» я свою мысль уже написал в предыдущем комментарии. С тех пор взгляд пока не изменился :)
Я всё же не могу отождествить инкапсуляцию как принцип ООП и, хм, локальность в потоке управления. Тем более goto действует в пределах функции или метода, это же не call/cc… Ограниченная видимость переменных в пределах операторного блока — это что, тоже инкапсуляция?
А, нет, возможно тут вы правы, не поинтересовался scope'ом самих операторов goto.
Однако тогда какой вообще толк в goto?
Однако тогда какой вообще толк в goto?
Даже в Pascal сделано goto по привязке к lable, а не к номеру строки, неужели в php не додумаются?!
UFO just landed and posted this here
помнится, даже в Паскале, в официально документации, было написано: функция goto, делает что-то-там, использовать только при отладке, не использовать в конечных программах.
И в других языках аналогично.
И в других языках аналогично.
зато сам код PHP девственно чист от этого:
~/tmp/php-5.3.0alpha1 $ grep -ir " goto " * | grep -v '*' | wc -l 16369
UFO just landed and posted this here
ойблин, название помню, что делала — уже не вспомню (
Вызов подпрограммы :) Когда младшей сестре в школе начали QB вдалбливать, и не такое пришлось вспомнить :-D
Проблема со 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
Обычно '==' используется чаще '==='. Прблему можно обойти, но не слишком удобным способом:
$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;
}
Нифига не выведится.
мм… а должно быть скока? Если true = 1 всегда.
мм… а должно быть скока? Если true = 1 всегда.
Мне вот интересно, паттерны, заменяющие свитчи и «тяжелые» условные операторы нынче непопулярны, да?
UFO just landed and posted this here
Не, тогда уж RTTI-based способы ещё более логичны :)
А break и continue вообще считается плохой практикой программирования и эти два оператора следует использовать лишь в крайних случаях.
Почему, и что за крайние случаи?
Потому что резко ухудшается читабельность кода и если через какое-то время попытаться понять, что делает кусок кода, в котором есть break или continue — сделать это непросто(особенно если код писал другой человек).
Я за свою довольно долгую практику не встречал ни одного случая когда break или continue были необходимы, всегда можно переписать код без них, хотя он и может стать немного объемнее, но и гораздо понятнее.
Мне приходилось использовать эти два оператора только во время отладки, когда, например, нужно вывести какой-то массив данных и прервать выполнение большого цикла.
Я за свою довольно долгую практику не встречал ни одного случая когда break или continue были необходимы, всегда можно переписать код без них, хотя он и может стать немного объемнее, но и гораздо понятнее.
Мне приходилось использовать эти два оператора только во время отладки, когда, например, нужно вывести какой-то массив данных и прервать выполнение большого цикла.
Научно доказано, что любой алгоритм можно реализвать только с помщью оператора if и цикла while. Может, только ими пользоваться? Код вполне станет «немного объемнее, но и гораздо понятнее».
Вряд ли станет гораздо понятнее. Кроме того, той же наукой доказано, что любую программу можно реализовать средствами железа. Почему бы не делать так? Вот познакомьтесь, эта микросхемка реализует веб сервер с одноклассниками (: А на сколько шустрее все будет на ней бегать… Единственная проблема это дальнейшее развитие и отладка немного затруднены (:
вы наверно хотели сказать «с помщью оператора if или цикла while»?
Нет. Я сказал, то что хотел сказать. Обязательно нужен оператор условия и оператор цикла. Как вы одним if-ом реализуйте цикл?
Рекурсивно
function opa($i)
{
$i++;
if($i != 10){
echo $i;
opa($i);
}
}
opa(1);
UFO just landed and posted this here
Выше ссылались на формальную теорему, что любой поток управления можно представить с помощью последовательного выполнения, условного выполнения и цикла, и только их. Рекурсия — это уже другая модель вычислений, впрочем, эквивалентной мощности.
Про то, как с помощью одного while обойтись без if написать?
1 000 000 проходов цикла это выдержит, как считаете?
Уточните вопрос, пожалуйста.
Вот так это будет работать?
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);
да
А стек возврата не переполнится?
Мне все равно. Моя задача была доказать, что любой алгоритм можно реализовать с помощью оператора if или оператора while.
В нормальных языках — не переполнится, потому что это хвостовая рекурсия, т.е. фактически, цикл. ;-)
В таком случае прийдется например вместо for писать while і писать лишнее условие в цыкл. Очень сомниваюсь что это понятнее чем обычный if в теле цыкла с условием.
В случае с break и contunue получается своего рода «прерывание»… а именно так оно реализовано на низком уровне (все процедуры, функции и т.п.). Для того чтобы понять проблему мы всегда разбираем ее суть, ИМХО для написания хорошего програмного кода необходимо понимать как он исполняется :)
В случае с break и contunue получается своего рода «прерывание»… а именно так оно реализовано на низком уровне (все процедуры, функции и т.п.). Для того чтобы понять проблему мы всегда разбираем ее суть, ИМХО для написания хорошего програмного кода необходимо понимать как он исполняется :)
Значит конструкция
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;
}
}
ужасно плохо читается?
Бред.
очень интересно. как вы обходитесь без break в случае поиска элемента в массиве? вы просматриваете всегда весь массив? как по мне нужно остановить цикл если элемент найден.
А что разве нет встроенных функций для поиска элементов массива? O_o
for($i=0;$i<$count && $notfind;$i++)…
или
do {...} while ($found)
кажется, это азбука алгоритмизации. кроме как в случае крайней запарки и работы с чужим кодом, не впишу break в цикл. нафик-нафик
или
do {...} while ($found)
кажется, это азбука алгоритмизации. кроме как в случае крайней запарки и работы с чужим кодом, не впишу break в цикл. нафик-нафик
Может это только мои заморочки, но данный цикл будет работать медленее, т.к. при каждой итерации будет выполняться дополнительная проверка. Да и плюс лишняя переменная.
UFO just landed and posted this here
Вы путаете с goto
Поддерживаю. А за использование операторов break N и continue N, где N > 1 я бы больно стучал.
Правда? Кто сказал? Я думал goto плохо а break и continue его заменяет… В пхп нету goto так надо обругать break и continue?
Это очень устаревший взгляд. Операторы break и continue считались «плохими» в 60-70 годах, поскольку они противоречили правилу структурного программирования об одной точке выхода из метода. В те времена в коде господствовали огромные функции и разобраться в них было сложно, особенно если у них было несколько точек выхода. В те времена это был хороший совет.
Сейчас высокоуровневый код изменился, господствует концепция Composed method, и соотвественно все функции небольшие. В таких условиях break и continue только улучшают код, поскольку помогают выделить особые граничные условия, облегчая чтение основного алгоритма. Без них проверка граничных условий пораждает кучу вложенных блоков, и код становится совсем некрасивым.
Сейчас высокоуровневый код изменился, господствует концепция Composed method, и соотвественно все функции небольшие. В таких условиях break и continue только улучшают код, поскольку помогают выделить особые граничные условия, облегчая чтение основного алгоритма. Без них проверка граничных условий пораждает кучу вложенных блоков, и код становится совсем некрасивым.
Спасибо, буду иметь ввиду. А не подскажите ссылку, где можно почитать про Composed method, или лучшее решение — гуглить? :)
Да тут особенно не о чем читать :). Просто мне нравится термин. Его предложил Кент бек в своей книжки про лучшие практики в Smalltalk.
Это простой и короткий метод, состоящий из нескольких простых шагов (вызовы других методов или системных функций, простые циклы), находящихся на одном уровне детализации (то есть если метод начинается с вызова понятно названных функций, а потом вдруг появляется страшный цикл работающий с битами, то это неправильно, для него нужна отдельная функция).
В общем, смысл в том, что такой метод должен читаться легко и приятно, как книжка (потому что он короткий и состоит из вызовов других функций с понятными именами). Взглянув на него сразу должна быть понятна его логика работы. А все сложные моменты реализации должны быть в других функциях.
Это простой и короткий метод, состоящий из нескольких простых шагов (вызовы других методов или системных функций, простые циклы), находящихся на одном уровне детализации (то есть если метод начинается с вызова понятно названных функций, а потом вдруг появляется страшный цикл работающий с битами, то это неправильно, для него нужна отдельная функция).
В общем, смысл в том, что такой метод должен читаться легко и приятно, как книжка (потому что он короткий и состоит из вызовов других функций с понятными именами). Взглянув на него сразу должна быть понятна его логика работы. А все сложные моменты реализации должны быть в других функциях.
Ага, а помимо этого — хорошо тестируемый. Только по набору тестов можно было понять, что делает метод. Кент Бек — одна из известных фигур в Agile в целом и unit-тестировании в частности.
Вообще, изучение принципов Test-Driven Development дает много ответов на то, как писать красивый и функциональный код без ненужных излишеств.
Вообще, изучение принципов Test-Driven Development дает много ответов на то, как писать красивый и функциональный код без ненужных излишеств.
Вы перепутали break/continue с goto. Вот goto следует избегать. А break/continue как раз и придумали на замену goto.
По ссылке про declare интересная информация про отладку скрипта. В частности, в комментариях к функции приводится пример, как можно проанализировать время выполнения каждой функции.
У кого-нибудь реализован класс с хорошей функциональностью для этих целей?
У кого-нибудь реализован класс с хорошей функциональностью для этих целей?
ну не свсем клас, но:
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));
А просто профайлер нельзя использовать?
Возвращаемые значения в инклудах удобно для отладки, еще на перле была такая практика — в конце файла ставишь что-нить типа return true; Потом проверяешь его — сразу видно где эрорра засела.
Блин я в шоке, такое публикова, первый пункт применения брейка вообще нормалного человека повалит с ног. Брейк и так всегда и во всех языках создавался именно для цикло, там же и применялся, а в данной статье автор почему-то думает люди используют его в свиче, а о применении в циклах не знают. Писец поный, а не статья. И вообще бредовы практически все пункты, среди них про include(вывода автора — чушь и только запутают неопытного пользователя(такого же как видимо и сам автор:))),
${} — не оператор, а просто тут есть скобки:)
Автору: не стоит больше писать такого на серьёзных ресурса, либо сразу помещайте статьи в раздел «Юмор»
${} — не оператор, а просто тут есть скобки:)
Автору: не стоит больше писать такого на серьёзных ресурса, либо сразу помещайте статьи в раздел «Юмор»
А чего минусуем если ни секрет, у автора много друзей ничего не понимающих в PHP, ну а если с чем-то не согласны, тоуж пишите пожалуйста.
Может проблема не в смысле вашего поста, а в манере подачи?
Да нет судя по минусам автора статьи других мои комментариев, дело не в способе подачи, а в том что с ним не согласны. А за пропущенные буквы в первом моем комментарие — извиняюсь, торопился:)
А чего такого в «манере подачи»? Абсолютно по делу коментарий.
«Знаете ли вы, для чего нужен брейк? В РНР, оказывается, есть такая неожианная возможность...». плАчу…
Пример исспользования include вообще разит наповал. Автор статьи занимается форменным вредительством: тем, кому в голову не приходило подобное исспользование — им оно и не надо, а те, кто догадался — понимают, почему этого делать нельзя никогда.
«Оператор ${}.» — это вообще цирк. И что же это за оператор такой? Унарный? Логический?
И это в статье «о программировании»…
«Знаете ли вы, для чего нужен брейк? В РНР, оказывается, есть такая неожианная возможность...». плАчу…
Пример исспользования include вообще разит наповал. Автор статьи занимается форменным вредительством: тем, кому в голову не приходило подобное исспользование — им оно и не надо, а те, кто догадался — понимают, почему этого делать нельзя никогда.
«Оператор ${}.» — это вообще цирк. И что же это за оператор такой? Унарный? Логический?
И это в статье «о программировании»…
Во-первых вы тут не один. Во-вторых, вы все знаете — хорошо, но кричать что статья плохая только потому написано то, что вы уже знаете — признак школьного возраста. В-третьих давайте вы не будете решать, за других — что кому надо — это не в вашей компетенции. В-четвертых что это за оператор такой, русским языком написано в статье. Прочитайте, пожалуйста, внимательно.
Это же все относится к serega011.
Это же все относится к serega011.
>Во-вторых, вы все знаете — хорошо, но кричать что статья плохая только потому написано то, что вы уже знаете — признак школьного возраста
При чём тут я? В принципе, это любой человек, занимающийся программированием должен знать.
> В-третьих давайте вы не будете решать, за других — что кому надо — это не в вашей компетенции.
А в чьей? В вашей? lol!
>В-четвертых что это за оператор такой, русским языком написано в статье.
Угу, именно это я и имел в виду. Вы, вообще, знаете, что такое «оператор»?
Привелите, пожалуйста, пункт спецификации РНР, где рассказывается об этом операторе.
Спасибо.
При чём тут я? В принципе, это любой человек, занимающийся программированием должен знать.
> В-третьих давайте вы не будете решать, за других — что кому надо — это не в вашей компетенции.
А в чьей? В вашей? lol!
>В-четвертых что это за оператор такой, русским языком написано в статье.
Угу, именно это я и имел в виду. Вы, вообще, знаете, что такое «оператор»?
Привелите, пожалуйста, пункт спецификации РНР, где рассказывается об этом операторе.
Спасибо.
> В принципе, это любой человек, занимающийся программированием должен знать.
Про любой учебник и пр. по PHP (и не только) можно сказать — а нафиг он нужен, если в мануалах все есть? Курите маны, господа! :-)
Любой человек, занимающийся програмированием, должен сперва откуда-то об этом узнать.
> А в чьей? В вашей?
Не в моей. Но я ж даю утврждений типа «так, вот для тех это нужно, а для тех не нужно».
> Вы, вообще, знаете, что такое «оператор»?
Инструкция или Оператор (англ. statement) — наименьшая автономная часть языка программирования; команда. — ru.wikipedia.org/wiki/Оператор_(программирование). Ну и?
Ладно, если это не оператор, что что это по вашему? Скобка? Скобка — это не оператор?
В манах по PHP я не нашел описание этой возможности, но это не значит что её нет.
Про любой учебник и пр. по PHP (и не только) можно сказать — а нафиг он нужен, если в мануалах все есть? Курите маны, господа! :-)
Любой человек, занимающийся програмированием, должен сперва откуда-то об этом узнать.
> А в чьей? В вашей?
Не в моей. Но я ж даю утврждений типа «так, вот для тех это нужно, а для тех не нужно».
> Вы, вообще, знаете, что такое «оператор»?
Инструкция или Оператор (англ. statement) — наименьшая автономная часть языка программирования; команда. — ru.wikipedia.org/wiki/Оператор_(программирование). Ну и?
Ладно, если это не оператор, что что это по вашему? Скобка? Скобка — это не оператор?
В манах по PHP я не нашел описание этой возможности, но это не значит что её нет.
Поздравляю. Вы наконец поняли то, что это НЕ ОПЕРАТОР.
{ } — это, если мне не изменяет память, называется операторными скобками. $ — это специальный символ или что-то в этом роде. Их сочетание к операторам отношениея не имеет.
Удачи в изучении программирования!
{ } — это, если мне не изменяет память, называется операторными скобками. $ — это специальный символ или что-то в этом роде. Их сочетание к операторам отношениея не имеет.
Удачи в изучении программирования!
Приведите, пожалуйста, пункт спецификации РНР, где рассказывается об этом.
Спасибо.
Спасибо.
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=
Первая ссылка, там и о РНР. Не вижу, что Вам помешало сделать это самому.
Ковыряться в стандарте, чтоб найти номер пункта у меня, к сожалению, нет ни времени ни желания — это всё-таки настолько общие вещи, что они не являются специфическими для какого-то конкретного языва.
Первая ссылка, там и о РНР. Не вижу, что Вам помешало сделать это самому.
Ковыряться в стандарте, чтоб найти номер пункта у меня, к сожалению, нет ни времени ни желания — это всё-таки настолько общие вещи, что они не являются специфическими для какого-то конкретного языва.
Операторные скобки — это всё-таки обычно тело if'а, циклов, илбо обособленная часть кода, в них заключённая. Не думаю, что в случае с ${$hi} они имеют такой-же смысл, скорее это именно спец. конструкция языка.
Вы меня извините, но вместо споров с мной займитесь лучше теорией. Не будете плутать в «оператор»/«операторные скобки»/«конструкция языка».
P.S. Операторные скобки — это совсем не «тело цикла». Блин, ну написано же человеческим языком: «команды, определяющие… блок команд». В разных языках это «{}», 'begin end' и т.д.
P.S. Операторные скобки — это совсем не «тело цикла». Блин, ну написано же человеческим языком: «команды, определяющие… блок команд». В разных языках это «{}», 'begin end' и т.д.
Не придирайтесь к лингвистическим особенностям, ясное дело это не тело цикла, это то что его ограничивает :) А о том, являются ли фигурные скобки в этом случае именно операторными или же обрабатываются PHP-парсером по иным правилам, можно судить только по исходным кодам Zend Engine, которые ни я, ни вы(наверняка), не читали.
Ага.
if ($expression) и $a = ($a+1)*2;
Скобки тут — это одно и тоже? Они выполняют одну и ту же функцию? Если рассуждать так же, как вы — то скобка тоже не оператор. Это конструкция языка. :-D
if ($expression) и $a = ($a+1)*2;
Скобки тут — это одно и тоже? Они выполняют одну и ту же функцию? Если рассуждать так же, как вы — то скобка тоже не оператор. Это конструкция языка. :-D
Вы меня не поняли.
Приведите, пожалуйста, пункт спецификации РНР, где рассказывается об этом.
Приведите, пожалуйста, пункт спецификации РНР, где рассказывается об этом.
подача комента плохая, но с критикой я согласен.
UFO just landed and posted this here
можете отрефакторить такое?
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;
Break2 — хороший вариант выхода из циклов, осуществляющих поиск по двумерному массиву:
for ($i=0;$i<X;$i++) for ($j=0;$j<Y;$j++)
{
...
if (...) break 2;
}
Многие вещи очевидны для тех, кто хоть раз читал документацию PHP.
новички это такие ребята которые еще не заглянули в langref? мне кажется подобные статьти можно с уверенностью назвать IT-графоманством. *заранее попросил прощения у своей кармы*
а вот и да!
А вот и не буду бить по вашей карме :-) Называйте как хотите.
Только знаете ли, не все начинают изучение с внимательного прочтения мануала. Даже многие опытные програмисы не заглядывают в официальный мануал основ языка. Потому что обычно изучение php начинается со статей типа «Выучите язык за 26 уроков». Эти статьи тоже можно так назвать? А там знаете ли таких вещей не пишут.
Только знаете ли, не все начинают изучение с внимательного прочтения мануала. Даже многие опытные програмисы не заглядывают в официальный мануал основ языка. Потому что обычно изучение php начинается со статей типа «Выучите язык за 26 уроков». Эти статьи тоже можно так назвать? А там знаете ли таких вещей не пишут.
спасибо, информативно, занес в закладки
Единственное, что действительно полезно — так это конструкция ${}
Но я, например, использую её в строках, например, если нужно вывести переменную внутри текста.
Т.е. «Превед ${var1}_медвед» вместо «Превед „.$var1.“_медвед». Имхо, так гораздо читабельнее.
Но я, например, использую её в строках, например, если нужно вывести переменную внутри текста.
Т.е. «Превед ${var1}_медвед» вместо «Превед „.$var1.“_медвед». Имхо, так гораздо читабельнее.
Пы.сы. Как меня раздражиют негативно настроенные малолетние или великовозрастные уебаны, кто бы знал. Дедовщинщики, блядь, с чувством безнаказанности. Отлавливать вас надо по одному и учить правильно жить. С позитивом в душе.
Может быть «Превед {$var1}_медвед»? =)
Ой, да, точно, затупил, пасип.
Да, в строках — это уже немного другое.
Значит не то написал. Кстати, а конструкция {$var1} пришла из руби все-таки? И когда она появилась, может знает кто? Я нашел её совершенно случайно, методом научного тыка. В мануалах не видел. Может я невнимательный?
http://php.ru/manual/language.types.string.html
Конструкция появилась в PHP4.
Конструкция появилась в PHP4.
ничего путного. написали бы уже про стримы что-ли.
UFO just landed and posted this here
а кому-нибуть приходилось в switch-е continue использовать, я вот сижу и ломаю голову… не могу припомнить ни одного случая, чтобы понадобилось даже
Про DECLARE не знал. Остальным активно пользуюсь. Особенно первыми двумя.
спасибо за статью, почти все для меня было неизвестно
UFO just landed and posted this here
В этом примере нет знака $, потому что при обращении к методу или свойству класса он не требуется.
Не путайте людей.
Мы обращаемся к методу или свойству экземпляра (объекта) класса.
При обращении к свойствам класса нужно $ указывать: stdClass::$myParam, и, следовательно, stdClass::${...}.
Уже не раз тут это писал… это ведь общеизвестно, стоит только прочесть официальную документацию и ОБДУМАТЬ ее, как ее использовать. Это между прочим и есть исходное значение слова «хакинг», баминг когда, нахождение малозатратных и высокоэффективных путей решения задачи.
И все станет понятно и такие статьи можно будет пачками писать. Но все равно спасибо за ваш труд, хотя бы по хорошему оформлению статьи, с примерами и т.п. С уважением.
И все станет понятно и такие статьи можно будет пачками писать. Но все равно спасибо за ваш труд, хотя бы по хорошему оформлению статьи, с примерами и т.п. С уважением.
про declare начинаешь узнавать подробней когда начинаешь юзать pcntl_fork().
Отличная статья. Показывает, что PHP'шники часто изучают язык по примерам, и испытывают лёгкий шок, когда обнаруживают неизвестные им конструкции. После этого пишут статьи.
Зато теперь говнокодеры знают про include и break — ведь они всё равно не будут ни мануалов читать, ни книг. Всё польза.
Зато теперь говнокодеры знают про include и break — ведь они всё равно не будут ни мануалов читать, ни книг. Всё польза.
Sign up to leave a comment.
Интересные возможности языка PHP