在Perl,如果我想預設可能存在的值,例如作爲參數傳遞,我可以這樣做:PHP是否有像perl這樣的默認分配習慣用法?
$var = parm->('variable') || 'default';
有什麼類似於在PHP還是我來檢查值分配後,如果它仍然是空分配它的默認值?
在Perl,如果我想預設可能存在的值,例如作爲參數傳遞,我可以這樣做:PHP是否有像perl這樣的默認分配習慣用法?
$var = parm->('variable') || 'default';
有什麼類似於在PHP還是我來檢查值分配後,如果它仍然是空分配它的默認值?
不完全是。
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';
我認爲標準的三元是在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
無論如何,很多探索的樂趣。
重要的是要記住'empty()'對'',0,'0',false,null,array()是真的。如果這些值中的任何一個對'$ var'有效,那麼測試可能更好地使用'isset()' – dnagirl 2010-06-02 14:40:58