此之下似乎并没有工作,我怎么会想到吧,虽然事件$ _GET [ 'friendid'] = 55它返回NULL简单的PHP isset测试
<?PHP
$_GET['friendid'] = 55;
$friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';
echo $friendid;
exit;
?>
此之下似乎并没有工作,我怎么会想到吧,虽然事件$ _GET [ 'friendid'] = 55它返回NULL简单的PHP isset测试
<?PHP
$_GET['friendid'] = 55;
$friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';
echo $friendid;
exit;
?>
取出!
。你不想否定表达。
$friendid = isset($_GET['friendid']) ? $_GET['friendid'] : 'empty';
好的,但我不明白为什么会发生这种情况,$ _GET ['friendid'] ='';不显示空的,不应该认为这是一个空值? ' – JasonDavis 2009-08-08 13:37:11
''是一个空字符串,但变量仍然设置。 – 2009-08-08 13:49:18
这与吮吸无关,但事实上可以声明变量($ var)或初始化($ var ='bla')。一个非声明变量和一个声明为空字符串的变量并不相同。 – 2009-08-08 14:02:42
如果friendid是不集,friendid = friendid否则friendid =空
目前你与三元运算符的工作:
$friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';
打破它的if-else
声明,它看起来像这样:
if(!isset($_GET['friendid']))
$friendid = $_GET['friendid'];
else
$friendid = 'empty';
看看什么在if
声明中真的发生了:
!isset($_GET['friendid'])
注意感叹号(!)在isset
函数前面。这是另一种说法,“与之相反”。你在这里做的是检查$_GET['friendid']
中没有设置任何值。如果是这样,$friendid
应该取得这个价值。
但真的,它会中断,因为$_GET['friendid']
甚至不存在。而且你不能拿出那些不存在的东西的价值。
从一开始就将其设置为$_GET['friendid']
,因此现在第一个if
条件为false,并将其传递给else
选项。
在这种情况下,请将$friendid
变量的值设置为empty
。
你想要的是删除感叹号,然后$friendid
的值将取值$_GET['friendid']
,如果它已经被预先设置。
如果您懒惰且有风险,可以使用error control operator @和简短形式ternary operator。
$friendid = @$_GET['friendid']?: 'empty';
我来到这里寻找答案中张贴的控制结构的简明形式,你的是完美的。谢谢。 – 2013-03-05 22:53:35
只是要注意,这个解决方案比较慢,可能会干扰(严重写入的)自定义错误处理程序等,并且if语句的执行速度会更快。但这并不意味着它是邪恶的。 – thomasrutter 2014-01-07 01:34:45
好的,我可能一直有一个类似的问题不熟悉!像贾斯达维斯那样的情况。
有点困惑,但发现没有!如... isset($ avar)与!isset($ avar)相比可以产生相当大的差异。
所以用!在地方,更多地说明是YES,因为在
since $_GET['friendid'] = 55; has been initialized...
tell me 'no' - the opposite - that it hasn't and set it to empty.
$friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';
where not having the ! tells me yes it has something in it, leave it be.
$friendid = (!isset($_GET['friendid'])) ? $_GET['friendid'] : 'empty';
如果A $ =“”那么....工作它更少混淆。 (或者如果PHP的$ A =“”)。
我发现这种字符串和变量的使用都是字符串,有时非常令人生畏。即使通过混淆,我实际上可以理解为什么...只是让我有点难以理解。
截至PHP 7's release,您可以使用空合并运算符(双“?”)这个:
$var = $array["key"] ?? "default-value";
// which is synonymous to:
$var = isset($array["key"]) ? $array["key"] : "default-value";
在PHP 5.3+,如果你正在核实是“truthy”值,你可以使用“Elvis operator”(注意,这不会检查isset)。
$var = $value ?: "default-value";
// which is synonymous to:
$var = $value ? $value : "default-value";
正是我在找什么,谢谢。 – 2016-12-08 13:41:18
?:-)嗯呵呵 – Greg 2016-12-08 15:53:44
我使用Null coalescing operator操作中,如果条件这样
if($myArr['user'] ?? false){
即相当于
if(isset($myArr['user']) && $myArr['user']){
应该呼应“空”,因为你必须在三元表达式操作员倒退。 – 2009-08-08 13:21:39