2014-03-18 44 views
0

我剛碰到一個應用程序的問題,其中查詢返回一個字符串,但有時返回值爲「0」作爲一個合法的字符串。這打破了我的應用程序的邏輯,我找不到修復程序。我在手冊中發現它爲什麼會發生:http://www.php.net/manual/en/language.types.boolean.phpPHP:可以將字符串「0」明確地轉換爲字符串嗎?

我使用PHP 5.5.10,通常所有字符串值都會轉換爲布爾值(true)....我在手冊中發現了可以將變量明確地轉換爲一個字符串。我加入了一些邏輯來做到這一點,但也失敗了。

<?php 
    $str1 = "0"; 
    //Below explicitly casts the string but it will still bool(false) 
    $str2 = (string) "0"; 
    var_dump($str1); 
    var_dump((bool) $str1); 
    var_dump($str2); 
    var_dump((bool) $str2); 
?> 

上述測試會告訴你,即使是顯式類型轉換不會讓這個字符串「TRUE」,因爲在一個布爾值。下面是我的問題的地方...

<?php 
    if($str) 
     { 
     //String is initialized, CODE to rip string is here 
     } else { 
     //Code for variable not initialized: NOTE: "0" or '0' will execute here! 
     } 
?> 

我可以以某種方式迫使PHP查看字符串'0'或'0'以布爾方式投射TRUE嗎?

我完全理解,一個整數值,0是假的,但串東西扔我...曲線

+1

的http://stackoverflow.com/questions/2382490/how-does-true-false-work-in-php – RiggsFolly

+0

我懂規矩可能的複製,我的問題是關於明確鑄件。我做了一個搜索,但還沒有找到它。 – Zoul007

+0

[嚴格比較](http://stackoverflow.com/a/589558/1064767):'$ zero =「0」; if($ zero){/ * wrong * /}; if($ zero ===「0」){/ * right * /};'我認爲這是[XY問題]的一個例子(http://meta.stackexchange.com/a/66378/220891)。你的任務*實際上*試圖完成什麼? – Sammitch

回答

1

如果你想只檢查變量(包括空值)的類型,你可以使用函數IS_STRING()

$a = '0'; 
var_dump(is_string($a)); //return TRUE 


$b = "0"; 
var_dump(is_string($b)); //return TRUE 

$c = 0; 
var_dump(is_string($c)); //return FALSE 

$d = null; 
var_dump(is_string($d)); //return FALSE 
+0

這是我找到的最佳答案。我的程序邏輯只需要知道字符串是否被初始化並且沒有設置爲NULL。謝謝這是我見過的最好的答案。 – Zoul007

0

嘗試if(strlen($str)) - 在這種情況下,"0"通過測試,因爲它的長度爲一。

+0

This Works! - 我的解決方法基本上是一個或聲明if($ str OR($ str ==「0」)){} ....解決方法也適用。 – Zoul007

0

答案是否定的。

即使字符串顯式轉換爲字符串類似如下:

$str = (string) 0; 
$str2 = (string) '0'; 
// Alternate Method 
settype($str, "string"); 

因爲當它涉及到所有varaibles PHP是弱類型,PHP將始終鬆散撤消例外變量的任何顯式類型轉換比如'0'。

感謝您的答覆