2017-09-13 131 views
-2

我下面的代碼片段,請通過它去:與賦值運算符一起使用的邏輯非(!)運算符是否總是將賦值運算符左側的變量賦值爲false?

<?php 
    // Top of the page, before sending out ANY output to the page. 
     $user_is_first_timer = !isset($_COOKIE["FirstTimer"]); 

    // Set the cookie so that the message doesn't show again 
     setcookie("FirstTimer", 1, strtotime('+1 year')); 
?> 

<H1>hi!</h1><br> 


<!-- Put this anywhere on your page. --> 
<?php if($user_is_first_timer): ?> 
    Hello there! you're a first time user!. 
<?php endif; ?> 

在我的編碼經驗,大部分時間我見過像!isset($_COOKIE["FirstTimer"])if聲明語句。這是我一生中第一次和轉讓經營者一起觀察這樣的陳述。

在上面的代碼中,我只想了解0​​語句做什麼?

在此代碼行中邏輯非(!)運算符的作用是什麼?

請用清楚可靠的解釋清楚我的疑惑。

謝謝。

+2

單身!只是翻轉一個布爾值。如果'isset($ _COOKIE [「FirstTimer」])'返回true,那麼用戶不是我假設的這個邏輯中的第一個定時器。那麼分配給$ user_is_first_timer的是! + true(= false)... – marekful

+0

請注意,'setcookie'的第二個參數應該是一個字符串。 – Progrock

回答

2

舉例說明。

Isset(isset:確定一個變量被設置,而不是NULL):

$foo = '1'; 
$bar = ''; 
$baz = null; 

var_dump(isset($foo)); 
var_dump(isset($bar)); 
var_dump(isset($baz)); 
var_dump(isset($bat)); 

輸出:

bool(true) 
bool(true) 
bool(false) 
bool(false) 

Not運算:

var_dump(!true); 
var_dump(!false); 

輸出:

bool(false) 
bool(true) 

一起:

$qux = 'something'; 
var_dump(!isset($qux)); 
var_dump(!isset($quux)); // Note quux isn't set. 

輸出:

bool(false) 
bool(true) 

因此,在你的榜樣,如果cookie值未設置(isset!),你的結論,他們以前沒有訪問過該網站。

有了作業,你可以有$true = !false$true這裏將保持真實,而不是虛假。