此之下似乎並沒有工作,我怎麼會想到吧,雖然事件$ _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