Pull to refresh

Comments 66

Можно линк на описание что это и с чем его едят?
Очень жду сокращенный тернарный оператор :)
($Эээ_не_ понял) ? ("Так он вроде уже есть") : ("Я что-то путаю и ему убрали скобки?")
(версии PHP 4, 5)
Вы привели пример обычного тернарного оператора :)
Сокращенный имеет вид:

$a ?: $b
эквивалент для
$a ? $a : $b
О, теперь понял. Спасибо.
Это сделали по аналогии с каким-то иным языком программирования?
ruby:
a ||= "first"
=> "first"
a ||= "second"
=> "first"
похоже?
perl - аналогично:
$a ||= $b это $a = $a ? $a : $b
$a //= $b это $a = defined($a) ? $a : $b
За что минусовать?
Не нравится ruby?
Или что там эта фича уже есть?
В Groovy этот оператор зовётся Elvis.
C#: a == null ? b : a
Сокращенный a ?? b
который уже давно был:

$c = $a || $b;
упс =) пардон, перепутал с JavaScript'ом (просто в нем часто использую эту конструкцию). А перепутал на фоне того, что в PHP работает следующая конструкция:

!a && ($c = $b); // которую я также часто в JS и PHP юзаю вместо if (bla-bla) {...}

Хотя, с && и || можно сымитировать конструкцию из JS:

!$c && ($c = $b) || ($c = $a); // :D но выглядит это в сто раз хуже, чем полных тернарный оператор - поэтому - только посмеяться

Поэтому все-таки $c = $a ?: $b;
О, __callStatic, ништяк =) а вот сокращенный GOTO зачем? или я чего то недопонял...
будет что-то типа вот такого треша:

$n = 1;

L1:
if ($n > 3) jump L2;
echo $n++;

jump L1;

L2:
Ну почти бейсик :) А почему сокращенный, limited - вроде как "ограниченный", в смысле, его не во всех случаях использовать можно будет...
да. ограниченный вроде как будет правильнее. подправил...

з.ы. А насчет "почти бейсик". К сожалению вынужден согласиться :((
не более чем раньше.
дело в том, что говнокодер, освоив goto будет применять его бездумно ровно так же как и ООП и прочие возможности языка, но люди адекватные будут использовать goto только в ситуациях, когда оно действительно необходимо ( да - бывает что goto во много улучшает читабельность кода )
Автор просто ошибся, это тернарный оператор сокращенный, а GOTO обычный... в общем это начало конца, лучше я сейчас утоплюсь, чем потом буду натыкаться скрипты такого рода революционными фичами...
Но это же альфа, у нас еще есть надежда, что GOTO уберут :) Тот, кто писал без goto, тот без него и будет обходиться, ну может быть раз на тыщу строк и применит. Я думаю, это сделано для облегчения перехода программеров с VB (или переноса кода с VB), там использование GOTO не так зазорно, ибо произошел он от обычного Бейсика, где без него вообще никак. Хотя и на VB можно писать спокойно без goto...
UFO just landed and posted this here
Windows 2000 - 8 лет
Windows 98 - 10 лет

Почему же младше?
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Младше - это Vindows Vista, так как ей меньше лет чем Windows98
Когда говорят о версиях программ, то слова «старше» и «младше» применяют не в смысле возраста, а в смысле старшенства версий. И 2000 старше чем 98.
отказ от поддержки Windows старше чем Windows 2000

быть может младше?
старше - это когда лет больше, а не меньше
Это верно. Людей сбивает с толку другое употребление этих слов. Например, "старшая модель в линейке продуктов" (здесь подразумевается лучшая). Применительно к версиям программ лучше ипользовать "более старая" или синонимы.
из первоисточника

The PHP 5.3.0 branch will only support Windows 2000, XP, Server 2003, Vista, and Server 2008. Support has been dropped for Windows 98, ME, and NT.

версии младше Windows 2000 больше не поддерживаются
Windows Vista младше или старше чем Windows 2000? Она определенно младше, так как появилась позже ( Вы старше или младше своих родителей? )
Старше по версии и младше по возрасту
а я что то не вижу в нововведених обещанной поддержки Unicode в ядре?!
Если не ошибаюсь, то поддержку обещали в PHP6
Да, точно, юникод только в шестерке. Жаль.
Что нас ждет еще в 5_3:
http://wiki.php.net/todo/php53
>>“real” properties with attached getters and setters

вот этого буду ждать с нетерпением .... Delphi сказывается :-0
Implement David's Circular Garbage collection patch. Done

О, ну наконец-то.
а. извините. Расскажите пожалуйста поподробнее об этом патче и ЧТО именно Вас не устраивало в текущем сборщике мусора?
Текущий сборщик мусора не отрабатывает кольцевые ссылки. То есть, если у нас два объекта ссылаются друг на дружку, то их не получится убить, и они будут висеть в памяти до скончания веков. Я в жж немного плакался на эту тему: http://david-m.livejournal.com/997340.html
насколько я помню, то у объектов данная проблема решена ( если Вы конечно не делаете что-то типа: $a =& new Class(); )
Проблема оставалась только для массивов:

$a = array( 1,2,3 );
$a[] = $a[ 1 ];
unset( $a ); // тут собсна есть утечка
Ну, не знаю… Я делаю, условно, $a->b = $b, $b->a = $a, и оно течёт так, что смотреть больно.
офигеть - goto прилепили - и зачем ?? опять скатываемся в бейсик ?? ООП уже отменили ?

хотя лямбда функции и LSB это гутт :)
Goto бывает полезен, даже такой полностью ООП язык, как с#, который специально разрабатывался именно как ООП, содержат его. Красиво может быть применен в конструкциях switch case.
Можно пример того, что можно реализовать с помощью GOTO, но нельзя с помощью старого функционала PHP? Насколько я, возможно профан в этом вопросе, представляю - GOTO создан исключительно для того чтобы убивать структуру и читабельность кода, реализуя алгоритмы а-ля:

set_time_limit(0);
ignore_user_abort(true);
$t = microtime(true);
сюды:
goto туды;
туды:
if(connection_aborted()) { goto конец; }
goto сюды;
конец:
$file = fopen('чудо.log', 'a');
fwrite($file, 'Этот юзверь продержался: '.(microtime(true) - $t).' миллисекунд');
fclose($file);
ничего не утверждаю. просто рекомендую к ознакомлению:

С.Макконел, "Совершенный код" (2 изд), стр.390: "Аргументация в защиту goto"

Это сказано к тому, что не бывает "плохих" структур языка. Бывают руки, которые из используют "плохо"
Так и я не утверждаю :) В ассемблере этот оператор (его аналог) вполне уместен, и даже более того, является базисом, как например и в некоторых других языках, где без этого оператора невозможно простым и удобным способом реализовать какие-либо конструкции, как например выход из вложенных циклов, и т.п.
Однако в PHP штатных средств для решения таких задач более чем достаточно: функции, исключения и т.п., по аналогии с вашим примером C# - в Java такого или аналогичного оператора - нет, и не предвидится, а ведь нельзя назвать Java языком кухарок, несмотря на то что у них на эмблеме чашка кофе :)

Ну и насчет прямых рук - так об этом и речь, я не говорю что кто-то прибежит ко мне в офис с пистолетом, и заставит меня переписать все исходняки с использованием GOTO - но раз будет возможность его использовать - будут и люди его использующие, и в прямоте их рук я к сожалению очень сомневаюсь, правку чужого кода на PHP и раньше нельзя было назвать сказкой, но с введением GOTO это может вылиться в действительно значительные трудозатраты.
все верно, только си-диез - не мой пример :)
Ой, прошу прощения, ошибся :)
UFO just landed and posted this here
Для РНР подобное реализуется через:

break 3;
попробуйте написать _быстрый_ синтаксический анализатор. сами себе ответите на вопрос.
Да, GOTO это конечно феноменальный отжиг :) Ну ничего, тут пофиксить - там поправить... добавить set_goto_handler()/restore_goto_handler(), поддержку новоиспеченных namespace'ов в goto, поддержку объектной модели, а-ля goto array($object, 'label'); ну и т.п. - и всем языкам будет язык :)
Вручную перечислять "замкнутые" переменные — оригинально :) Интересно, чем руководствовались.

Зато __invoke() — симпатичная штука.
там написано чем руководствовались - из-за своеобразного подхода 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
Мелочь, а приятно ;)
UFO just landed and posted this here
> ну а замыкаемые переменные как значения, а не ссылки — это отдельный непередаваемый ппц

ну а с другой стороны — можно контролировать вручную — что по ссылке, а что нет (проводя аналогию с JS, опять же, — там ссылка на родительский скоп — и если вы меняете переменную родительского скопа после определения замыкания, то и замкнутая переменная будет указывать уже на новое значение, что с одной стороны хорошо, но не всегда; поэтому здесь (в PHP) сделали указание ссылки "&" вручную; хотя объекты «по ссылке» передаются)
Sign up to leave a comment.

Articles