Gre*_*ham 6 php string boolean compare variable-assignment
我想知道为什么这不能分配一个字符串$separator:
$separator = $options['title-separator'] || ' | ';
Run Code Online (Sandbox Code Playgroud)
在其他地方,$ option已分配给某些文本或空字符串.(实际上,在我的现实生活中,它是一些文字或错误,但无论如何......).$ separator是TRUE而不是字符串.
以下内容实现了我想要的,但似乎不必要地冗长:
$separator = ( $s = $options['title-separator'] ) ? $s : ' | ';
Run Code Online (Sandbox Code Playgroud)
我来自JavaScript,这两个例子都有相同的结果,这对我来说是合乎逻辑的.为了理解这一点,我需要了解哪些PHP?现在,我只是被每个地方使用的数百个额外字符所困扰.:) 谢谢!
在PHP 5.3 coalesce函数上看到这个?::
所以你可以写:
$separator = $options['title-separator'] ?: ' | ';
Run Code Online (Sandbox Code Playgroud)
编辑:正如KingCrunch所说,你会得到这个通知:
Notice: Undefined index: ...
Run Code Online (Sandbox Code Playgroud)
,但仅限于您已配置系统.
在我们的PHP代码库中,我们coalesce(...)定义了一个自定义函数,它返回第一个isset()返回true的替代函数.
第一
$seperator = isset($options['title-seperator'])
? $options['title-separator']
: ' | ';
Run Code Online (Sandbox Code Playgroud)
不是动词,它只是想要它告诉你的完整.但是,使用PHP5.3,您可以使用快捷方式
$seperator = $options['title-seperator'] ?: ' | ';
Run Code Online (Sandbox Code Playgroud)
但是你会得到很多关于未定义索引键的注意事项.我建议留下第一个例子.
另一个(在我看来)更清洁的解决方案是引入默认值.而不是使用"按原样"选项将它们与预定义值的数组合并
$defaults = array(
'title-separator' => ' | '
);
$options = array_merge ($defaults, $options);
Run Code Online (Sandbox Code Playgroud)
现在您不需要关心它,并且您在一个地方拥有所有默认值,而不是分散在您的代码中.
小智 5
PHP 7 引入了 Null Coalescing 运算符,您可以在其中使用
$first_name = $_POST['f_name'] ?? 'no data found';
Run Code Online (Sandbox Code Playgroud)