2010-06-02 26 views
4

在Perl,如果我想預設可能存在的值,例如作爲參數傳遞,我可以這樣做:PHP是否有像perl這樣的默認分配習慣用法?

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

有什麼類似於在PHP還是我來檢查值分配後,如果它仍然是空分配它的默認值?

回答

7

不完全是。

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 
4
$var = (!empty($foo)) ? $foo : 'default'; 
+1

重要的是要記住'empty()'對'',0,'0',false,null,array()是真的。如果這些值中的任何一個對'$ var'有效,那麼測試可能更好地使用'isset()' – dnagirl 2010-06-02 14:40:58

0

我認爲標準的三元是在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 

這裏有一個可以回顯的直列:

$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 

無論如何,很多探索的樂趣。

相關問題