2012-08-09 35 views
1

我已經看到編程實踐中可以從函數返回字符串或布爾值。在這種情況下,是否建議在if循環中檢查empty()和isset(),或者只是進行檢查,如($ returnvar)是否工作。PHP - 檢查if語句中的返回值

這是我正在玩的一段代碼。你認爲應該是輸出,並且檢查條件是否正確?

感謝,

<?php 

function testMe() 
{ 
try 
{ 
    $returnText = 'John King Rocks'; 
    return $returnText; 
} 
catch (Exception $e) 
{ 
    return false; 
} 
} 

$str = testMe(); 
if ($str) 
{ 
    echo $str; 
} 

?> 
+0

請注意,'返回false;'這裏是無法訪問的 - 'try'塊中的任何內容都不會導致異常 – cHao 2012-08-09 17:46:51

+0

true ..但它只是一個例子,因爲代碼到達那裏.. – Jake 2012-08-09 17:49:06

+0

empty()可能炸燬你 - 它認爲''0'是空的,除非你確切地知道你將要做什麼,否則不要使用它 – 2012-08-09 17:50:12

回答

4

此代碼,就可以(爲$str這個具體的例子),但在PHP檢查布爾是有風險的,如你所說的,應該謹慎進行,我會建議(一般),以檢查它,如下所示:

if ($str !== false) 
{ 
    echo $str; 
} 
2

會發生什麼事是$strtype casted to a boolean。因此,該字符串將計算爲false當它是:

  1. 空字符串
  2. 字符串「0」

所有其它值都被認爲是true,這可能不是你想要的行爲。所以,回答你的問題:

你認爲應該是輸出?

好了,返回的字符串不匹配或者兩個條件,所以if聲明將評估爲true$strecho()「d。 (更不用說上面的代碼永遠不會產生一個異常)。

檢查是否正確的if?

這取決於您正在尋找的功能。如果要考慮所有字符串(包括「」和「0」)是否有效,並且僅當函數返回false時跳過echo(),則應檢查返回值是否與!== false相等。否則,如果上述兩個條件可接受爲false,則應該沒問題。

2

if不是一個循環。這是一個有條件的。 echo false將被強制爲echo '0',所以if檢查只有在您不想打印零時才需要。但是,echo null將不會打印任何內容。更好的辦法是返回空字符串。你應該避免混合返回類型。許多其他語言甚至不允許它。

順便說一下,您的異常處理什麼都不做。try的內容不能拋出異常。吞吐異常也很糟糕,您需要e之前的$

在回答你的問題時,有一句話是「偏執編程是專業編程。「也就是說,如果您希望應用程序始終如一地運行(在此情況下if檢查很好),則應該儘可能多地執行檢查,但瞭解您正在使用的方法和預期結果也很重要。如果testMe爲false,或者你想不打印任何東西,你想要其他的處理嗎?或者你想不打印任何東西?

+0

如果它是假的,我不希望它在語義上打印任何東西 – Jake 2012-08-09 17:48:02

+1

,它不是一個循環,但從概念上講,它可能是b e考慮了運行0或1次的「循環」。 – cHao 2012-08-09 17:48:21

+0

@cHao我不同意。循環需要能夠運行無限次數。 – 2012-08-09 17:59:44