2015-10-26 2 views
3

Я пытаюсь ориентироваться в PHP, исходя из Perl, R, C и еще нескольких других языков.PHP синтаксический сахар против Perl

Вопросы:

  1. Существуют ли PHP-измы, чтобы заменить следующий Perl синтаксис?

    $y= $x || "I am undefined"; ## Default value 
    ($x==1) or die "problem with $x"; ## Works under some circumstances 
    $y= ($x1==1) ? 2 : ($x2==2) ? 3 : ($x3==3) ? 2 : 5; ## Chaining needs() in PHP 
    print "Val: $array[$x]"; ## Does not work with $_SESSION[...] in PHP 
    

    Конечно, я могу писать более длинные функции/конструкции, которые имеют ту же функциональность, но, может быть, Есть стандартные PHP короткие пути, чтобы заменить эти довольно общие полезные конструкции.

  2. Какой синтаксический сахар имеет PHP, что мой другой язык не предлагает?

+5

PHP является * уникальным/специальным * среди языков программирования, делая оператор условного оператора trinary левым ассоциативным. Сделайте ваши двоеточия недовольными (': (') и закройте все парсеры в конце инструкции. – tjd

+0

@tjd Frowny-trernary statements. Хе-хе. Хороший трюк. – tadman

+1

Почему здесь есть какое-то преимущество, почему группа php не меняется это какой-то код, использующий левую ассоциацию полезным образом? –

ответ

4

1.

Вы можете думать о ?: как || в Perl, но это на самом деле тройная/(Trinary?) Оператор, где второй параметр опущен и подразумевает первый ($x).

$y= $x ?: "I am undefined"; # not before v5.3.x 

Вы не можете ($x==1) or return|break|continue; так что вы должны использовать регулярные if условие (фигурные скобки могут быть опущены для отдельных операторов)

if (!($x==1)) break; 

Что касается сцепления тройных, я боюсь, что все не просто как вы думаете, если вы хотите работать, как в Perl

$y = ($x1==1 ? 2 : 
    ($x2==2 ? 3 : 
    ($x3==3 ? 2 : 5 
))); // close as many times as there is rows above 

вы можете использовать фигурные скобки, если переменная не интерполировать в двойных кавычках,

print "Val: {$array[$x]}"; 

2.

Что касается синтаксического сахара вы можете использовать

$arg += array(
    "default" => 55, 
); 

, как вы бы

%arg = ("default" => 55, %arg); 

в Perl для того, чтобы дать значения по умолчанию для отсутствующих хэш-ключей.

+0

PHP7 имеет оператор null-coalesce '??', который я уже хорошо использую - это похоже на '?:', но это не вызывает, если '$ x' -' 0', 'false' или что-то иное, null'. –

+0

@NiettheDarkAbsol это хорошо знать, и perl имеет '//' эквивалент. –

Смежные вопросы