упс =) пардон, перепутал с JavaScript'ом (просто в нем часто использую эту конструкцию). А перепутал на фоне того, что в PHP работает следующая конструкция:
!a && ($c = $b); // которую я также часто в JS и PHP юзаю вместо if (bla-bla) {...}
Хотя, с && и || можно сымитировать конструкцию из JS:
!$c && ($c = $b) || ($c = $a); // :D но выглядит это в сто раз хуже, чем полных тернарный оператор - поэтому - только посмеяться
не более чем раньше.
дело в том, что говнокодер, освоив goto будет применять его бездумно ровно так же как и ООП и прочие возможности языка, но люди адекватные будут использовать goto только в ситуациях, когда оно действительно необходимо ( да - бывает что goto во много улучшает читабельность кода )
Автор просто ошибся, это тернарный оператор сокращенный, а GOTO обычный... в общем это начало конца, лучше я сейчас утоплюсь, чем потом буду натыкаться скрипты такого рода революционными фичами...
Но это же альфа, у нас еще есть надежда, что GOTO уберут :) Тот, кто писал без goto, тот без него и будет обходиться, ну может быть раз на тыщу строк и применит. Я думаю, это сделано для облегчения перехода программеров с VB (или переноса кода с VB), там использование GOTO не так зазорно, ибо произошел он от обычного Бейсика, где без него вообще никак. Хотя и на VB можно писать спокойно без goto...
Это верно. Людей сбивает с толку другое употребление этих слов. Например, "старшая модель в линейке продуктов" (здесь подразумевается лучшая). Применительно к версиям программ лучше ипользовать "более старая" или синонимы.
Текущий сборщик мусора не отрабатывает кольцевые ссылки. То есть, если у нас два объекта ссылаются друг на дружку, то их не получится убить, и они будут висеть в памяти до скончания веков. Я в жж немного плакался на эту тему: http://david-m.livejournal.com/997340.html
насколько я помню, то у объектов данная проблема решена ( если Вы конечно не делаете что-то типа: $a =& new Class(); )
Проблема оставалась только для массивов:
$a = array( 1,2,3 );
$a[] = $a[ 1 ];
unset( $a ); // тут собсна есть утечка
Goto бывает полезен, даже такой полностью ООП язык, как с#, который специально разрабатывался именно как ООП, содержат его. Красиво может быть применен в конструкциях switch case.
Можно пример того, что можно реализовать с помощью GOTO, но нельзя с помощью старого функционала PHP? Насколько я, возможно профан в этом вопросе, представляю - GOTO создан исключительно для того чтобы убивать структуру и читабельность кода, реализуя алгоритмы а-ля:
Так и я не утверждаю :) В ассемблере этот оператор (его аналог) вполне уместен, и даже более того, является базисом, как например и в некоторых других языках, где без этого оператора невозможно простым и удобным способом реализовать какие-либо конструкции, как например выход из вложенных циклов, и т.п.
Однако в PHP штатных средств для решения таких задач более чем достаточно: функции, исключения и т.п., по аналогии с вашим примером C# - в Java такого или аналогичного оператора - нет, и не предвидится, а ведь нельзя назвать Java языком кухарок, несмотря на то что у них на эмблеме чашка кофе :)
Ну и насчет прямых рук - так об этом и речь, я не говорю что кто-то прибежит ко мне в офис с пистолетом, и заставит меня переписать все исходняки с использованием GOTO - но раз будет возможность его использовать - будут и люди его использующие, и в прямоте их рук я к сожалению очень сомневаюсь, правку чужого кода на PHP и раньше нельзя было назвать сказкой, но с введением GOTO это может вылиться в действительно значительные трудозатраты.
Да, GOTO это конечно феноменальный отжиг :) Ну ничего, тут пофиксить - там поправить... добавить set_goto_handler()/restore_goto_handler(), поддержку новоиспеченных namespace'ов в goto, поддержку объектной модели, а-ля goto array($object, 'label'); ну и т.п. - и всем языкам будет язык :)
там написано чем руководствовались - из-за своеобразного подхода PHP к области видимости переменных, невозможно определить из какого именно контекста брать переменные. Явное перечисление - возможно даже более чистых подход.
Я только не понял, можно ли будет вставить конструкцию
function (parameters) { body } как аргумент при вызове другой функции, или все таки придётся создавать дополнительную переменную?
если в замыкание попадут только нужные (перечисленные) данные из родительского скопа, то это еще лучше (в JavaScript, например (в текущей версии) - в замыкании оседает весь родительский скоп - независимо - 1 или 1000 свойств из родительского скопа вы используете во внутренней функции)
Из полезностей, кроме неймспесов LSB, лямбда-функций еще стоило бы отметить:
CGI/FastCGI “htaccess” style ini
add fileinfo extension to core
Split off deprecation from E_STRICT into E_DEPRECATED
Мелочь, а приятно ;)
> ну а замыкаемые переменные как значения, а не ссылки — это отдельный непередаваемый ппц
ну а с другой стороны — можно контролировать вручную — что по ссылке, а что нет (проводя аналогию с JS, опять же, — там ссылка на родительский скоп — и если вы меняете переменную родительского скопа после определения замыкания, то и замкнутая переменная будет указывать уже на новое значение, что с одной стороны хорошо, но не всегда; поэтому здесь (в PHP) сделали указание ссылки "&" вручную; хотя объекты «по ссылке» передаются)
PHP 5.3 alpha