1

関数から文字列またはブール値を返すことができるプログラミング手法を見てきました。このような場合、ifループでempty()とisset()をチェックすることをお勧めします。または、if($ returnvar)が機能するかどうかのようなチェックを実行するだけです。

これが私が遊んでいるコードの一部です。出力は何だと思いますか?if条件でのチェックは正しいですか?

ありがとう、

<?php

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

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

?>
4

3 に答える 3

4

このコードは(この特定の例では$str)機能するはずですが、PHPでブール値をチェックすることは危険です.あなたが示唆したように、慎重に行う必要があります.

if ($str !== false)
{
  echo $str;
}
于 2012-08-09T17:43:38.383 に答える
2

何が起こるかは、型が boolean にキャストさ$strれることです。したがって、文字列は次の場合に評価されます。false

  1. 空の文字列
  2. 文字列「0」

他のすべての値が考慮されますがtrue、これは希望する動作ではない可能性があります。だから、あなたの質問に答えるために:

アウトプットはどうあるべきだと思いますか?

返される文字列は 2 つの条件のいずれとも一致しないため、ifステートメントは評価されてtrue' d$strになります。echo()(上記のコードは決して例外を生成できないことは言うまでもありません)。

if のチェックは正しいですか?

それは、探している機能によって異なります。すべての文字列 ("" と "0" を含む) が有効であると見なしecho()、関数が を返す場合のみをスキップfalseする場合は、戻り値が と等しいかどうかを確認する必要があります!== false。それ以外の場合、上記の 2 つの条件が として受け入れられるfalse場合は、問題ありません。

于 2012-08-09T17:43:58.417 に答える
2

ifループではありません。条件付きです。 echo falseに強制されるecho '0'ためif、ゼロを出力したくない場合にのみチェックが必要です。ただし、echo null何も印刷されません。さらに良いのは、空の文字列を返すことです。戻り値の型を混在させないでください。他の多くの言語では、それが許可されていません。

ちなみに、例外処理は何もしません..の内容はtry例外をスローできません。$例外を飲み込むのも良くないので、 の前にが必要ですe

あなたの質問への答えとして、「偏執的なプログラミングはプロのプログラミングです」という言葉があります。つまり、アプリケーションを一貫して動作させたい場合は、できるだけ多くのチェックを行う必要があります (ifこの場合、チェックは適切です) が、使用しているメソッドと期待される結果を知ることも重要です。testMeが falseの場合、他の処理が必要ですか? それとも何も印刷したくないですか?

于 2012-08-09T17:45:56.293 に答える