2012-01-07 119 views
3

作爲一個php neewbie,我嘗試閱讀很多其他人的代碼以學習。 今天我通過管道傳來這樣的:邏輯運算符php true或false

if (stripos($post_to_check->post_content, '[' . $shortcode) !== false) 

我想知道是什麼 !==false==true 如果有人可以解釋給我,這將是極大的讚賞之差。 ..如果沒有真正的區別 - 將使用引用的另一個的原因是什麼?

+0

http://php.net/manual/en/language.operators.comparison.php – hakre 2012-01-07 10:26:36

+1

可能重複[參考 - 這個符號在PHP中意味着什麼?](http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) – hakre 2012-01-07 10:28:15

+0

@hakre不是真的 - 它不能解釋爲什麼它在這個特定的情況下使用 – 2012-01-07 10:29:22

回答

6

PHP是一種鬆散類型的語言。 ==與兩個值匹配,並且===匹配值以及值的數據類型。

if (8 == '8') // returns true 

以上情況只是匹配不是數據類型因此if評估值TRUE

if (8 === '8') // returns false 

和值的這一個檢查兩個值和數據類型,因此這if評估爲FALSE

在需要檢查值和數據類型時,使用===,如果只需要比較非數據類型的值,則使用==

在你的情況,該字符串中的子串的

stripos返回的位置,如果沒有找到字符串,則返回FALSE

if (stripos($post_to_check->post_content, '[' . $shortcode) !== false) 

上述內部串支票子串的代碼,並得到評估,以TRUE只有當子字符串中找到。 如果將其更改爲

if (stripos($post_to_check->post_content, '[' . $shortcode) != false) 

,並當在0位置if發現的子串評估爲FALSE,即使子字符串是有主的字符串中。 然後病情會變成這個樣子

if (0 != false) 

而且由於0被視爲FALSE

所以,你必須使用有!==

if (0 !== false) 

這將比較這將評估爲FALSE的兩個值的值和數據類型 值0是整數類型,而falseboolean類型,因此這裏的數據類型不匹配,條件將是TRUE

PHP手冊頁聲明這些comparison operator您應該檢查一次。

+0

感謝Shakti的回答,雖然它並沒有完全幫助我直接懷疑我(我問過!== false和== TRUE之間的區別,而不是!== false和!= false之間的區別) 。然而,我明白這一切都與我的neewbie狀態有關,並且不知道stripos()函數不是真/假函數。它返回一個VALUE或FALSE。在那種情況下,我明白爲什麼特定的程序員使用過它。我仍然不知道有什麼區別!== false和== TRUE是.. – 2012-01-08 03:35:43

1

!==是一個比較不只是比較,也是類型的兩個變量的

它在這裏使用,因爲stripos可以在找不到命中時返回false,也可以在字符串的第一個字符中找到命中0

==無法區分這兩種情況(它們都是「虛假」),因此在使用stripos時必須使用===。有一個在manual警告:

這個函數可以返回布爾值FALSE,但也可能返回的結果爲FALSE的非布爾值,例如0或「」。有關更多信息,請閱讀布爾部分。使用===運算符來測試此函數的返回值。

+0

爲什麼downvote? – 2012-01-07 10:36:43

3

!==false==true之間的差異是在PHP相同/不相同且/不相等的比較之間的差。

請參閱Comparison Operators PHP手冊相同之間的差異平等是豆。

+0

感謝您的回答,就像之前所說的,我已經閱讀過該頁面。我不知道的是stripos()不是true/false函數,它是一個值/虛函數。如果它是一個真/假函數,我仍然有一個理解!== false和== true之間的區別的問題(除非「true」和「false」可以是一個字符串??) – 2012-01-08 03:39:29

+0

== = =等於比較。 '==='=相同的比較。 '!=='是相同比較的否定,而不是平等比較的否定。也許這就是重點? – hakre 2012-01-08 10:57:50

+0

就像我說的,我明白平等!=相同:-)無論如何,我無法感謝你們所有人的回答,我學到了很多東西,即使在這個問題上起伏不定 - 甚至有經驗的用戶對此有疑問......再次感謝, – 2012-01-08 11:41:32

-1

注意:== true和=== true是不同的。

我想!== false類似於=== true,所以只解釋== true和=== true。對於第一個==,它的值相等,因此1 == true,0 == false。對於===,它在PHP中是「相同的」,即值相等,也是類型。

因此,如果結果在第零位,結果應該爲真;然而,如果使用== true,它將不會像0!= true一樣工作。

例如, stripos('a sheep','a') 如果您使用== true,結果是錯誤的,因爲它是在第一個地方。

+0

爲什麼地獄是每個人都在這裏像這樣完全有效的答案?這是一個很好的觀點和幫助!說真的,我覺得StackOverflow的質量已經開始走上維基百科的道路,因爲它越來越高的曝光率...... – 2012-01-07 11:54:09