Есть ли у PHP идиум назначения по умолчанию, например perl?

В Perl, если я хочу по умолчанию значение, которое может существовать, например, как переданный параметр, я могу сделать это:

$var = parm->('variable') || 'default'; 

Есть ли что-то аналогичное в PHP или мне нужно проверить значение после назначения, и если он все еще null, присвойте ему значение по умолчанию?

Не совсем.

PHP 5.3 представил то, что они называют «тройной ярлык».

 // old way $foo = $foo ? $foo : 'default'; // new way in 5.3 $foo = $foo ?: 'default'; 

Это даже не так много ярлыков и работает только с коэффициентами короткого замыкания (если 0 является допустимым значением для $foo этот ярлык завершится с ошибкой).

В противном случае вам придется выполнять проверку типа / существования старого, жесткого, ручного способа.

Вы также можете указать значения по умолчанию для параметров в сигнатуре – не уверен, что именно это вы получаете, но вот что в действии

 function foo( $bar = 'baz' ) { echo $bar; } foo(); // baz 
 $var = (!empty($foo)) ? $foo : 'default'; 

Я думаю, что стандартный тернар является defacto в PHP:

 $var = $foo ? $foo : 'default'; echo $foo ? $foo : 'default'; 

Но есть несколько других трюков, которые могут быть немного чище в некоторых случаях:

 //these are very close but can't be echo'd inline like a ternary $var = $foo OR $var = 'default';//assigning a default to $var if $foo is falsy ($var = $foo) || $var = 'default';//same effect as above isset($var) || $var = 'default';//making sure $var is set 

Вот один из них: echo'd inline:

 $var = ($foo) ?: 'default';//partial ternary echo ($foo) ?: 'default';//aka ternary shortcut (PHP 5.3+ only) 

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

 echo @($foo) ?: 'default';//@ fixes it but isn't considered good practice 

Одно место, которое не стоит использовать тернарный подход, – это когда они вложены:

 $user = (($user)?$user:(($user_name)?$user_name:(($user_id)?$user_id:'User'))); echo 'Welcome '.$user;//is pretty messy ($user = $user) || ($user = $user_name) || ($user = $user_id) || ($user = 'User'); echo 'Welcome '.$user;//is more readable 

В любом случае, весело провести время.